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

12_进程,线程,协程,IO多路复用的区别的更多相关文章

  1. 进程&线程&协程

    进程  一.基本概念 进程是系统资源分配的最小单位, 程序隔离的边界系统由一个个进程(程序)组成.一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stac ...

  2. Python 进程线程协程 GIL 闭包 与高阶函数(五)

    Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...

  3. python自动化开发学习 进程, 线程, 协程

    python自动化开发学习 进程, 线程, 协程   前言 在过去单核CPU也可以执行多任务,操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换任务2,任务2执行0.01秒,在切换到任务3,这 ...

  4. 多道技术 进程 线程 协程 GIL锁 同步异步 高并发的解决方案 生产者消费者模型

    本文基本内容 多道技术 进程 线程 协程 并发 多线程 多进程 线程池 进程池 GIL锁 互斥锁 网络IO 同步 异步等 实现高并发的几种方式 协程:单线程实现并发 一 多道技术 产生背景 所有程序串 ...

  5. Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程

    1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...

  6. 协程IO多路复用

    协程:单线程下实现并发并发:伪并行,遇到IO就切换,单核下多个任务之间切换执行,给你的效果就是貌似你的几个程序在同时执行.提高效率任务切换 + 保存状态并行:多核cpu,真正的同时执行串行:一个任务执 ...

  7. day 35 协程 IO多路复用

    0.基于socket发送Http请求 import socket import requests # 方式一 ret = requests.get('https://www.baidu.com/s?w ...

  8. Python之路--协程/IO多路复用

    引子: 之前学习过了,线程,进程的概念,知道了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位.按道理来说我们已经算是把CPU的利用率提高很多了.但是我们知道无论是创建多进程还是创建多 ...

  9. python的进程/线程/协程

    1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...

随机推荐

  1. Linux学习日志第一天——基础命令①

    文章目录 前言 命令的作用及基本构成 关于路径 命令 ls (list) 命令 pwd (print working directory) 命令cd (change directory) 命令 mkd ...

  2. 解决 EntityFrameworkCore tool 3.1 init.ps1 is not recognized 问题

    昨天将项目升级到.net core 3.1后, 打开vs2019 Package Manager Console后突然发生了错误,如下 最终导致EntityFramework 迁移相关命令都不能正常使 ...

  3. 题解 SGU294 He's Circles

    题目描述 失踪人口回归 根据\(Polya\)定理$$ans=\frac 1n \sum\limits_{i=1}^n2^{gcd(i, n)}$$ 考虑枚举\(gcd\),原式变成$$\frac 1 ...

  4. JavaScript 基础三

    遍历对象的属性 for...in 语句用于对数组或者对象的属性进行循环操作. for (变量 in 对象名字) { 在此执行代码 } 这个变量是自定义 符合命名规范 但是一般我们 都写为 k 或则 k ...

  5. 深度学习 | sklearn的train_test_split()各函数参数含义解释(超级全)

    在机器学习中,我们通常将原始数据按照比例分割为"测试集"和"训练集",从 sklearn.model_selection 中调用train_test_split ...

  6. 一些Java中不为人知的特殊方法,学完后面试官可能都没你知道的多!

    如果你用过反射并且执行过getDeclaredMethods方法的话,你可能会感到很吃惊.你会发现出现了很多源代码里没有的方法.如果你看一下这些方法的修饰符的话,可能会发现里面有些方法是volatil ...

  7. 运用sklearn进行线性判别分析(LDA)代码实现

    基于sklearn的线性判别分析(LDA)代码实现 一.前言及回顾 本文记录使用sklearn库实现有监督的数据降维技术——线性判别分析(LDA).在上一篇LDA线性判别分析原理及python应用(葡 ...

  8. js替换指定位置字符串

    var str='QWER';//替换WE newstr=replacepos(str,1,2,'XX'); console.log(newstr);//QXXR; function replacep ...

  9. Jmeter逻辑控制器之If Controller的使用解析

    一.If Controller概述 类似于编程语言中if语句,根据给定表达式的值决定是否执行该节点下的子节点,表达式的值 为true则执行,为false则不执行,默认使用javascript语法进行判 ...

  10. springmvc中get和post区别和应用

    最近对post和get什么时候使用 和 应该怎么使用  他俩的区别  有了一些疑问 根据本人的了解   post是对数据进行了封装保护 get是安全性较差的 可以看到数据的信息    post是用来改 ...