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

  • 相关阅读:
    C# DataSet与DataTable的区别和用法
    黑马程序员_ADO.Net(ExecuteReader,Sql注入与参数添加,DataSet,总结DataSet与SqlDataReader )
    CSS中a标签样式的“爱恨”原则
    外部调用JS文件时出现中文乱码的解决办法
    #nav li:hover ul 与#nav li a:hover ul 的区别
    css sprites介绍
    CSS样式优化
    网站页面常用的尺寸
    display:inline、block、inline-block 的区别
    CSS文档流
  • 原文地址:https://www.cnblogs.com/tangxuecheng/p/13634589.html
Copyright © 2020-2023  润新知