操做系统之进程与线程

进程和线程


(1)线程是进程的一个实体,一个进程能够拥有多个线程,多个线程也能够并发执行。一个没有线程的进程也能够看作是单线程的,一样线程也常常被看作是一种轻量级的进程。而且进程能够不依赖于线程而单独存在,而线程则否则。

(2)进程是并发程序在一个数据集合上的一次执行过程,进程是系统进行资源分配和调度的独立单位,线程是进程的实体,它是比进程更小的可以独立执行的基本单元,线程本身不拥有任何系统资源,可是它能够访问其隶属进程的所有资源。

(3) 与进程的控制表PCB类似,线程也有本身的控制表TCB,可是TCB中所保存的线程状态比PCB表少得多。

进程的做用与定义:是为了提升CPU的执行效率,为了不因等待而形成CPU空转以及其余计算机硬件资源的浪费而提出来的。

线 程的引入:例如,有一个Web服务器要进程的方式并发地处理来自不一样用户的网页访问请求的话,能够建立父进程和多个子进 程的方式来进行处理,可是建立一个进程要花费较大的系统开销和占用较多的资源。除外,这些不一样的用户子进程在执行的时候涉及到进程上下文切换,上下文切换 是一个复杂的过程。因此,为了减小进程切换和建立的开销,提升执行效率和节省资源,人们在操做系统中引入了"线程(thread)"的概念。

进程和线程的区别


主要从调度、并发性、系统开销、拥有资源等方面对进程和线程进行比较。

调度

在传统的操做系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。而引入线程的操做系统,则把线程做为调度和分派的基本单位,而进程做为资源拥有的基本单位。

并发性

引入线程的操做系统中,不只进程之间能够并发执行,并且在一个进程中的多个线程之间也能够并发执行,于是使操做系统具备更好的并发性,有效的使用系统资源和提升系统吞吐量。

系统开销

进程是拥有系统资源的一个独立单位,拥有本身的资源。线程本身不拥有系统资源,可是能够访问隶属进程的资源。一和进程的代码段、数据段以及系统资源能够供同一进程的其余全部线程共享。

拥有资源

在建立或撤销进程时,系统要为之分配或回收资源,如内存空间、I/O设备等。

操做系统所付出的开销显著大于建立、撤销进程开销。

进程切换涉及到当前进程CPU环境的保存环境的设置以及被调度运行的进程的CPU环境的设置。

线程切换只须要保存和设置少许的寄存器的内容。

进程切换开销远大于线程切换开销

同一进程中多个线程具备相同的地址和空间,使线程之间的同步和通讯实现变得简单。

 

进程的通信方式


所谓进程通讯,是指正在运行的进程之间相互交换信息。

  • 管道中还有命名管道和非命名管道之分,非命名管道只能用于父子进程通信,命名管道科用于非父子进程,命名管道就是FIFO,管道就是先进先出的通信方式。FIFO是一种先进先出的队列,它相似于一个管道,只容许数据单向流动。每一个FIFO都有一个名字,容许不相关的进程访问同一个FIFO,所以也成为命名管道。

  • 消息队列:是用于两个进程之间的通信,首先在一个进程中建立一个消息队列,而后往消息队列中写数据,而另外一个进程则从那个消息队列中取数据。须要注意的是,消息队列是用建立文件的方式进行创建的,若是说一个进程向某个消息队列中写入数据以后,另外一个进程没有取出数据,即便向消息队列中写数据已经结束,保存在消息队列中的数据没有丢失,也就是说下次再从消息队列中取数据时仍是上次的数据。

  • 信号量:不能传递复杂消息,只能用来同步。

  • 共享内存:只要首先建立一个共享内存区,其余线程按照必定的步骤就能访问到这个共享内存区的数据,固然可读科写。

通信方式比较


  • 管道:速度慢,容量有限

  • 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。

  • 信号量:不能传递复杂消息,只能用来同步

  • 共享内存区:可以很容易控制容量,速度快,但要保持同步,好比一个进程在写的时候,另外一个进程要注意读写的问题,至关于线程中的线程安全,固然,共享内存区一样能够用做线程间通信,不过没这个必要,线程间原本就已经共享了一块内存的。

相关文章
相关标签/搜索