进程线程协程

Posted simple-record

tags:

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

进程

进程是系统分配资源和调度的基本单位, 每个CPU同一时刻只能处理一个进程。进程拥有程序代码段、打开的文件、数据资源、独立的内存空间。
进程的局限性是创建、撤销、切换的开销比较大。

线程

线程是程序执行的最小单位,线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程;线程拥有自己的栈空间。
线程的优点:减小了程序并发执行的开销,提高了系统的并发性能。
线程的缺点:线程没有自己的系统资源,只有运行时不可缺少的资源,但是同一进程的各线程可以共享进程所拥有的系统资源。对于某些独占资源存在锁机制,处理不当会出现死锁。

协程

协程是一种用户态的轻量级线程;协程调度完全由用户控制,没有线程切换的系统资源开销。
优点:协程执行效率高。因为子程序切换不是线程切换,由程序自身控制,没有线程切换的开销。协程不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好

区别与联系

  • 进程与线程

1、资源方面:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其他进程不可见
2、通信:进程间通信IPC,进程间可以直接读写进程数据段进行通信——需要进程同步和互斥手段辅助,以保证数据的一致性
3、调度和切换:线程上下文切换比进程上下文切换要快的多
4、在多线程OS中,线程不是一个可执行的实体

  • 线程与协程
  • 1、线程是操作系统调度,协程是应用系统自己调度。
  • 2、协程的栈空间是可以动态调整的,线程的栈空间是固定大小的
  • 3、线程进程都是同步机制,而协程则是异步
  • 4、协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
  • 5、一个线程可以多个协程,一个进程也可以单独拥有多个协程

线程调度策略

  • 时间片轮转
  • 先来先服务
  • 基于优先权调度算法
  • 多队列调度
  • 最短作业优先

线程的主要状态

技术图片

  • 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
  • 运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权,此时处于就绪状态(ready)。
  • RUNNING:就绪状态的线程在获得cpu时间片后变为运行中状态。
  • 阻塞(BLOCKED):表线程阻塞于锁。
  • 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
  • 超时等待(TIME_WAITING):该状态不同于WAITING,它可以在指定的时间内自行返回。
  • 终止(TERMINATED):表示该线程已经执行完毕。







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

进程线程协程的区别

进程线程协程

初识进程 线程 协程:协程

Python之进程线程协程篇

进程线程轻量级进程协程和go中的Goroutine

进程线程协程的区别