操作系统之进程与线程

进程和线程


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

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

(3) 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表少得多。

进程的作用与定义:是为了提高CPU的执行效率,为了避免因等待而造成CPU空转以及其他计算机硬件资源的浪费而提出来的。

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

进程和线程的区别


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

调度

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

并发性

引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的并发性,有效的使用系统资源和提高系统吞吐量。

系统开销

进程是拥有系统资源的一个独立单位,拥有自己的资源。线程自己不拥有系统资源,但是可以访问隶属进程的资源。一和进程的代码段、数据段以及系统资源可以供同一进程的其他所有线程共享。

拥有资源

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

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

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

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

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

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

进程的通讯方式


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

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

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

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

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

通讯方式比较


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

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

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

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

原文地址:https://www.cnblogs.com/sasuke-y/p/5665589.html