线程和进程的比较

    xiaoxiao2025-06-06  20

           由于线程具有许多传统进程所具有的特征,所以又称为轻型进程或进程元,相应地,把传统进程称为重型进程。它相当于只有一个线程的任务。

    1、调度的基本单位

           在传统的OS中,进程是作为独立调度和分派的基本单位,因而进程是能独立运行的基本单位。在每次被调用时,都需要进行上下文切换,开销较大。而在引入线程的OS中,已把线程作为调度和分派的基本单位,因而线程是能独立运行的基本单位。当线程切换时,仅需保存和设置少量寄存器内容,切换代价远低于进程。在统一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,必然就会引起进程的切换。

    2、并发性

           在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,甚至还允许在一个进程中的所有线程都能并发执行。同样,不同的进程中的线程也能并发执行。这使得OS具有更好的并发性,从而能更加有效地提高系统资源的利用率和系统的吞吐量。例如,在文字处理器中可以设置三个线程:第一个线程用于显示文字和图形,第二个线程从键盘读入数据,第三个线程在后台进行拼写和语法检查。又如,在网页浏览器中,可以设置一个线程来显示图像或文本,在设置一个线程用于从网络中接收数据。

           此外,有的应用程序需要执行多个相似的任务。例如,一个网络服务器经常会接到许多客户的请求,如果仍采用传统的但线程来执行该任务,则每次都只能为一个客户服务。但如果在一个进程中可以设置多个线程,讲其中一个专用于监听客户的请求,则每当又一个用户请求时,便立即创建一个线程来处理该客户的请求。

    3、拥有资源

           进程可以拥有资源,并作为系统中拥有资源的一个基本单位。然而,线程本身并不拥有系统系统资源,而是仅有一点必不可少的、能保证独立运行的资源。比如,在每个线程中都应有一个用于控制线程运行的线程控制块TCB、用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。

           线程除了拥有自己的少量资源外,还允许多个线程共享该进程所拥有的额资源,这首先表现在:属于同一进程的所有线程都具有相同的地址空间,这意味着,线程可以访问该地址空间中的每一个虚地址;此外,还可以访问进程所拥有的资源,如已打开的文件、定时器、信号量机构等的内存地址空间和他所申请到的I/O设备等。

    4、独立性

           在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。这是因为,为防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其他资源,除了共享全局变量外,不允许其他进程访问。但是同一进程中不同线程往往是为了提高并发性以及进程之间的合作而创建的,他们共享进程的内存地址空间和资源,如每个线程都可以访问他们所属进程地址空间中的所有地址,如一个线程中的堆栈可以被其他线程读、写,甚至完全清除。由一个线程打开的文件可以供其他线程读、写。

    5、系统开销

           在创建或撤销进程时,系统都要为之分配和回收进程控制块、分配和回收进程控制块、分配或回收其他资源,如内存空间和I/O设备等。OS为此所付出的开销,明显大于线程创建或撤销时所付出的开销。类似地,在进程切换时,涉及到进程上下文切换,而线程的切换代价也远远低于进程的。例如,在Solaris 2 OS中,线程的创建要比进程的创建快30倍,而线程上下文切换要比进程上下文切换快5倍。此外,由于一个进程中的多个线程具有相同的地址空间,线程之间的同步和通信也比进程的简单。因此,在一些OS中,线程的切换、同步和通信都无需操作系统内核的干涉。

    6、支持多处理机系统

           再多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上。但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,是他们并行执行,这无疑将加速进程的完成。因此,现代多处理OS都无一例外引入了线程。

    最新回复(0)