什么是多进程,多线程,协程
Posted on Wed, 25 Dec 2024 10:34:55 +0800 by LiangMingJian
什么是进程?什么是线程?
进程是表示资源分配的基本单位,是调度运行的基本单位。当用户运行自己的程序时,系统就创建一个进程,并为它分配包括内存空间、磁盘空间、I/O设备等资源。然后,把该进程放入进程的就绪队列中等待被系统执行。当该进程被系统的进程调度程序选中后,系统会为它分配CPU以及其它资源,运行该进程。
线程是进程中执行运算的最小单位,如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。
线程与进程的包含关系如下图所示。
多进程和多线程的区别?
数据共享、同步
- 多进程:不共享数据,数据交换需要用IPC(进程间通信),数据因此同步简单
- 多线程:共享进程数据,数据处理交换方便,数据因此同步复杂
内存、CPU
- 多进程:占用内存多,切换复杂,CPU利用率低
- 多线程:占用内存少,切换简单,CPU利用率高
创建销毁、切换
- 多进程:创建销毁、切换复杂,速度慢
- 多线程:创建销毁、切换简单,速度快
编程、调试
- 多进程:编程简单,调试简单
- 多线程:编程复杂,调试复杂
可靠性
- 多进程:进程间互不影响,一个进程挂了,程序也不会整个挂掉
- 多线程:线程影响着进程,一个线程挂掉,将导致整个进程挂掉
进程间或线程间的通信方式
- 进程:管道, 信号量, 信号, 消息队列, 共享内存, 套接字
- 线程:锁机制(互斥锁、条件变量、读写锁),信号量机制(Semaphore),信号机制(Signal)
什么是协程
协程(Coroutine),又称微线程,纤程,是单线程语言中用来模拟多线程的一种方式。协程的作用,是在执行部分耗时长的函数时,可以先中断执行,去处理其他耗时短的函数,等到空闲时再继续执行该耗时长的函数,最终使得这一整个过程看上去像多线程。
协程的优势
- 执行效率极高,因为子程序切换(函数)不是线程切换,仅仅是函数的切换,没有切换线程的开销。所以与多线程相比,线程的数量越多,协程性能的优势越明显。
- 不需要多线程的锁机制,因为是单线程,所以不存在同时写变量冲突,在控制共享资源时也不需要加锁,因此执行效率高很多。