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. 007_go语言中的switch语句

    代码演示 package main import "fmt" import "time" func main() { i := 2 fmt.Print(&quo ...

  2. Docker初探之运行RabbitMQ消息队列服务

    我们平时在使用RabbitMQ是基于Windows操作系统的,在使用前需要安装Er-Lang和RabbitMQ服务程序,如果版本不对RabbitMQ就启动失败,安装流程也比较麻烦. 但如果在Docke ...

  3. [POJ3783]Balls 题解

    题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...

  4. Python实现迪杰斯特拉算法

    首先我采用邻接矩阵法来表示图(有向图无向图皆可) 图的定义如下: class Graph: def __init__(self, arcs=[]): self.vexs = [] self.arcs ...

  5. C#算法设计查找篇之05-二叉树查找

    二叉树查找(Binary Tree Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/706 访问. 二叉排 ...

  6. web基础(四)严格模式与混杂模式

    web基础(四)严格模式与混杂模式 一.介绍 DOCTYPE 标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档.DO ...

  7. 基于ABP做一个简单的系统——实战篇:4.基于富文本编辑器,Razor模板引擎生成内容并导出Word 填坑记录

    起因 需求是这样的,有一种协议需要生成,协议的模板是可配置的,在生成过程中,模板中的内容可以根据约定的标记进行替换(就像mvc的razor模板一样).生成后的内容还需要导出成word或pdf. 常见的 ...

  8. HMM隐马尔可夫模型来龙去脉(一)

    目录 隐马尔可夫模型HMM学习导航 一.认识贝叶斯网络 1.概念原理介绍 2.举例解析 二.马尔可夫模型 1.概念原理介绍 2.举例解析 三.隐马尔可夫模型 1.概念原理介绍 2.举例解析 四.隐马尔 ...

  9. JavaScript学习系列博客_25_JavaScript 数组(Array)

    数组 - 数组也是一个对象,是一个用来存储数据的对象,和Object类似,但是它的存储效率比普通对象要高. - 数组中保存的内容我们称为元素 - 数组使用索引(index)来操作元素 - 索引指由0开 ...

  10. 基于函数的I/O操作(头文件stdio.h)

    基于函数库的I/O是C语言标准库的功能,基于系统级I/O函数实现. 系统级I/O函数对文件的标识是文件描述符,C语言标准库中对文件的标识是指向FILE结构的指针.在头文件cstdio或stdio.h中 ...