zoukankan      html  css  js  c++  java
  • 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密集型并发

  • 相关阅读:
    GOIP connects with Elastix through “config by line”
    Asterisk 的安全性
    sql2005性能优化(在32位系统上突破2G内存使用量的方法) .
    Asterisk的type类型和身份认证
    Elastix GOIP 网关配合
    Elastix 安装G729 G723语音编码
    Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
    Proxmox Reset Root Password
    volatile适用场景
    ANT教程经典
  • 原文地址:https://www.cnblogs.com/tangxuecheng/p/13634589.html
Copyright © 2011-2022 走看看