12_进程,线程,协程,IO多路复用的区别

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密集型并发

posted @ 2020-08-30 21:08  唐雪成  阅读(630)  评论(0编辑  收藏  举报