进程与线程的关系

Posted liugangjiayou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程与线程的关系相关的知识,希望对你有一定的参考价值。

进程与线程的关系

  1. 线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  3. 线程在执行过程中,需要协作同步。不需要进程的线程间要利用消息通信的办法实现同步。
  4. 处理机分给线程,即真正在处理机上运行的是线程。
  5. 线程是指进程内的一个执行单元,也是进程内的可调度实体。

为什么在进程中派生出线程?

  1. 应用的需要
  2. 开销的考虑
  3. 性能的考虑

线程的应用

  • 典型的应用
    • web服务器
  • 工作方式
    • 从客户端接收网页请求(http协议)
    • 从磁盘上检索相关网页,读入内存
    • 将网页返回给对应的客户端
  • 如何提高服务器工作效率?
    • 网页缓存

没有线程

  • 一个服务进程
    • 顺序编程:性能下降
  • 有限状态机
    • 编程模型复杂:采用非阻塞I/O
模型 特性
多线程 有并发、阻塞系统调用
单线程进程 无并发、阻塞系统调用
有限状态机 有并发、非阻塞系统调用、中断

构造服务器的三种方法

  1. 进程与线程的关系

线程具有许多传统进程所具有的特征,故又称为轻型进程(Light-Weight Process)或进程元;而把传统的进程称为重型进程(Heavy-Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少需要有一个线程。下面,我们从调度、并发性、系统开销、拥有资源等方面,来比较线程与进程。

(1). 调度

在传统的操作系统中,拥有资源的基本单位和独立调度的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分配的基本单位,而把进程作为拥有资源的基本单位,使传统进程的两个属性分开,线程便能轻装运行,从而可显著地提高系统的并发程度。在同一进程中,线程的切换不会引起进程的切换,在由一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。

(2). 并发性

在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使操作系统具有更好的并发性,从而能更有效地使用系统资源和提高系统吞吐量。例如,在一个未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被阻塞时,便没有其它的文件服务进程来提供服务。在引入了线程的操作系统中,可以在一个文件服务进程中,设置多个服务线程,当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程阻塞时,第三个线程可以继续执行,依此类推,从而显著地提高了文件服务的质量以及系统吞吐量。

(3). 拥有资源

不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。一般地说,线程自己不拥有系统资源(只有一些必不可少的资源),但它可以访问其隶属进程的资源。亦即,—个进程的代码段、数据段以及系统资源,如已打开的文件、I/O设备等,可供同一进程的所有线程共享。

(4). 系统开销

由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到当前进程整个CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只需保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。在有的系统中,线程的切换、同步和通信都无需操作系统内核的干预。

  • 线程的状态及转换

线程既然是进程中的一个执行体,是系统进行调度的独立单位,它就是一个动态的过程,因此,也就有生命周期,即由创建而产生,由调度而执行,由撤销而消亡。在线程的生命周期中,它总是从一种状态变迁到另一种状态。与进程类似,在不同的操作系统中,线程的状态有所不同,下面给出在Windows 2000/XP中的线程及其转换图,如图2.17。

  • 线程调度

线程调度与进程调度类似,原则上讲,高优先级的线程比低优先级的线程有更多的运行机会,当低优先级的线程在运行时,被唤醒的或结束I/O等待的高优先级线程立即抢占CPU并开始运行,如果线程具有相同的优先级,则通过轮转来抢占CPU资源。在Windows 2000/XP中,采用的是基于优先级的抢占式多CPU调度策略。

以上是关于进程与线程的关系的主要内容,如果未能解决你的问题,请参考以下文章

进程与线程的关系和区别

Windows NT/2000/XP进程与线程之间的关系

操作系统:进程与线程大解析

操作系统:进程与线程大解析

进程与线程的定义关系及区别

Linux系列:多进程多线程与CPU的关系