现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

VC++多线程编程(二):多线程概述

2012-12-05 06:42 工业·编程 ⁄ 共 670字 ⁄ 字号 评论 4 条

   进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。

线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。

多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意

Win32 SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C++6.0中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便。

目前有 4 条留言    访客:4 条, 博主:0 条

  1. 爱求索 2012年12月09日 8:41 下午  @回复  Δ1楼 回复

    调度性,在os中调度分派拥有资源的基本单位都是进程,而线程作为调度和分派的基本单位而把进程作为资源拥有的基本单位;并发性,在引入线程的os中不仅进程之间可以相互切换亦可并发执行;资源拥有,进程是拥有资源的独立单位而线程一般不拥有资源但他可以访问其隶属其进程的资源;系统开销,由于在创建或撤销进程时系统都要为之分配和回收资源,os所付出的开销将显著地大于在创建或撤销线程时的开销而线程切换只需保存和设置少量寄存器的内容并不涉及存储器管理方面的操作进程切换的开销也远大于线程切换的开销。

  2. 爱求索 2012年12月09日 8:41 下午  @回复  Δ2楼 回复

    线程也有自己的资源,比如栈,私有数据等等。说他使用而不拥有资源指的是使用的是进程的打开文件句柄,进程的全局数据,进程的地址空间等等,这些都属于进程,而不属于线程,进程内个线程共享。
    进程切换比线程切换开销大是因为进程切换时要切页表,而且往往伴随着页调度,因为进程的数据段代码段要换出去,以便把将要执行的进程的内容换进来。本来进程的内容就是线程的超集。而且线程只需要保存线程的上下文(相关寄存器状态和栈的信息)就好了,动作很小

  3. 爱求索 2012年12月09日 10:38 下午  @回复  Δ3楼 回复

    首先进程是一个程序的完整的执行过程。至于为什么创建子进程可能有如下的原因
    1:标识这个进程是属于谁的。
    2:便于管理。可以一次性的把某些进程一起kill。
    3:进程启动之前可能需要父进程为他做一些初始化一类的操作。

    • 爱求索 2012年12月09日 10:39 下午  @回复  ∇地下1层 回复

      线程是轻量级的进程。线程共享进程的所有资源。线程是可以占有CPU的最小单位。
      迅雷应该就是多线程的。好处如下:
      1.创建线程的系统开销比创建进程的系统开销要小得多。
      2.多线程有利于多个tcp连接一起下载文件,或者文件分段,每个线程负责下载文件的一小部分。

给我留言

留言无头像?