什么是多进程,多线程,协程

Posted on Wed, 25 Dec 2024 10:34:55 +0800 by LiangMingJian


什么是进程?什么是线程?

进程是表示资源分配的基本单位,是调度运行的基本单位。当用户运行自己的程序时,系统就创建一个进程,并为它分配包括内存空间、磁盘空间、I/O设备等资源。然后,把该进程放入进程的就绪队列中等待被系统执行。当该进程被系统的进程调度程序选中后,系统会为它分配CPU以及其它资源,运行该进程。

线程是进程中执行运算的最小单位,如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。

线程与进程的包含关系如下图所示。

多进程和多线程的区别?

数据共享、同步

  • 多进程:不共享数据,数据交换需要用IPC(进程间通信),数据因此同步简单
  • 多线程:共享进程数据,数据处理交换方便,数据因此同步复杂

内存、CPU

  • 多进程:占用内存多,切换复杂,CPU利用率低
  • 多线程:占用内存少,切换简单,CPU利用率高

创建销毁、切换

  • 多进程:创建销毁、切换复杂,速度慢
  • 多线程:创建销毁、切换简单,速度快

编程、调试

  • 多进程:编程简单,调试简单
  • 多线程:编程复杂,调试复杂

可靠性

  • 多进程:进程间互不影响,一个进程挂了,程序也不会整个挂掉
  • 多线程:线程影响着进程,一个线程挂掉,将导致整个进程挂掉

进程间或线程间的通信方式

  • 进程:管道, 信号量, 信号, 消息队列, 共享内存, 套接字
  • 线程:锁机制(互斥锁、条件变量、读写锁),信号量机制(Semaphore),信号机制(Signal)

什么是协程

协程(Coroutine),又称微线程,纤程,是单线程语言中用来模拟多线程的一种方式。协程的作用,是在执行部分耗时长的函数时,可以先中断执行,去处理其他耗时短的函数,等到空闲时再继续执行该耗时长的函数,最终使得这一整个过程看上去像多线程。

协程的优势

  • 执行效率极高,因为子程序切换(函数)不是线程切换,仅仅是函数的切换,没有切换线程的开销。所以与多线程相比,线程的数量越多,协程性能的优势越明显。
  • 不需要多线程的锁机制,因为是单线程,所以不存在同时写变量冲突,在控制共享资源时也不需要加锁,因此执行效率高很多。
参考文件 1: 多进程,多线程,协程的理解_@qq_43279936