进程和线程

195 阅读3分钟

定义

进程:一个在内存中运行的程序。每个进程都有一个独立的内存空间,一个进程可以有多个线程。比如在window系统中,打开记事本就启动了记事本进程。

线程:进程中的一个执行任务(控制单元),负责当前进程中的程序执行。一个进程至少有一个线程,多个线程可共享数据。

区别

  1. 根本区别:进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位
  2. 资源开销和内存分配:每个进程都有自己独立的代码和数据空间,所以进程之间的地址空间和资源是相互独立的。同一类线程共享代码和数据空间,每个线程也有自己独立的运行栈和程序计数器。

进程之间通信

参考文章

  1. 管道:管道传输数据是单向的,需要双向通信的话就要创建两个管道。通信方式效率低,不适合进程间频繁的交换数据。
  2. 消息队列:类似于发邮件。缺点:通信不及时,因为每次数据的写入和读取都需要经过用户态与内核态之前的拷贝过程,不适合大数据的传输。
  3. 共享内存:拿出一块虚拟地址空间,映射到相同的物理内存中,这样一个进程写入东西,另一个进程立马就能看到,大大提高通信速度。这样产生了新问题,如果多个进程同时修改一个共享内存,就会有冲突。例如同时写一个地址,先写进程的内容会被覆盖。
  4. 信号量:其实是一个整型的计数器,主要用于实现进程间的互斥于同步,是共享内存在任意时刻只能被一个进程访问。
  5. 信号:信号是进程间通信机制中唯一的异步通信机制。
  6. Socket:实现跨网络于不同主机上的进程之间的通信。主要有三种通信方式:基于TCP协议的通信方式,基于UDP协议的通信方式,本地进程通信方式。

进程死锁

什么是死锁:不允许两个或多个进程同时占用,若不能采取其他措施,这种循环等待状况会无线持续下去,就发生进程死锁。

产生死锁的的必要条件

  1. 互斥条件:某个资源在一段时间内只能由一个进程占用,不能同时被两个或两个以上的进程占有。
  2. 不可抢占条件:进程所获得的资源在未使用完毕之前,资源申请者不能强行从资源占有者手中夺取,只能由该资源的占有者自行释放
  3. 占有申请条件:进程至少已经占有一个资源,但又申请新的资源,但申请的资源已被另外的进程占有,此时该进程阻塞;但他在等待新资源时,还在占用已占有的资源。
  4. 循环等待条件:存在一个进程等待序列{p1,p2,...pn},p1等待P2占有资源,P2等待P3占用资源,.....,而Pn等待p1占用资源,这样形成一个进程等待循环。