1.进程
1.进程可以使用计算机多核
2.进程是资源分配的单位
3.进程的创建要比线程消耗更多的资源效率很低
4.进程空间独立,数据安全性跟好操作有专门的进程间通信方式
5.一个进程可以包含多个线程,线程共享进程资源
6.进程有自己特有资源
7.多进程根据cpu核数不一样可能是并行的
2.线程
1.线程可以使用计算机多核
2.线程是操作系统调度的单位
3.线程切换从系统层面保存和恢复CPU上下文以及每个线程自己的缓存Cache等数据,切换时需要的资源一般效率一般
4.线程使用全局变量通信,必须要和同步互斥机制配合防止产生资源争夺
5.一个线程中可以包含多个协程函数,协程函数共享线程资源
6.线程有自己特有资源
7.多线程根据cpu核数不一样可能是并行的
3.协程
1.协程只能用到计算机单核
2.协程对事件的监听是在应用层完成,没有占有到内核资源
3.协程的切换通过应用层记录程序的上下文栈区,因此切换任务资源很小效率高
4.协程无需进行同步互斥操作,对IO并发性极好
5.可以通过调度时的参数实现一个协程函数完成多协程并发
6.协程的特有资源即调用时传递的参数
7.协程是在一个线程中所以是并发
4.IO多路复用
1.IO多路复用只能用到计算机单核
2.IO多路复用对事件的监听是在内核中完成的,占用到一定的内核资源
3.IO多路复用切换是通过内核的上下文栈区,因此切换任务资源很小效率高
4.IO多路复用无需进行同步互斥操作,对IO并发性极好
5.可以通过调度时的参数实现一个IO多路复用函数完成多IO多路复用并发
6.IO多路复用的特有资源即调用时传递的参数
7.IO多路复用是在一个线程中所以是并发
5.使用场景
1.需要创建较多的并发任务比较简单线程比较合适
2.如果程序间数据资源使用重叠比较多,要考虑到线程锁是否需要更复杂的逻辑
3.如果多个任务无关联性,不易用多线程将其融入到一个进程中
4.Python线程不适用语计算密集型并发,适合IO密集型并发