进程、线程、协程
一、进程
进程和线程是包含关系,每个进程中都至少有一条线程
进程是计算机最小的资源分配单位
可以利用多核,可以实现并行
数据隔离
创建、销毁、切换的时间开销都比较大
随着开启的数量增加给操作系统带来压力
使用场景:充分利用多核,高计算型的程序,但启动的数量有限
二、线程
线程是进程的一部分
线程是被CPU调度的最小单位
线程的切换是由操作系统完成的
在CPython解释器下不能利用多核,数据共享
创建、销毁、切换的时间开销都比进程小很多
随着开启的数量增加给操作系统带来压力
使用场景:高IO型,一些协程现有的模块不能规避IO操作的功能,适合使用多线程
三、协程
协程的切换工作是用户完成的
协程是一个线程,完全不能利用多核,也不会产生数据不安全的现象
多个任务之间互相切换不依赖操作系统,无论开启多少个协程都不会给操作系统带来负担
开销比线程小
使用场景:高IO型,通用的场景可以用协程现有的模块来规避一些IO操作
四、线程和协程的区别
协程不会产生数据不安全的现象,线程会产生。
线程的调度不能干预,只能写自己的逻辑,调度的事情由操作系统来
协程是用户自己控制,能抢占更多的CPU资源取决于切换的策略(双刃剑)