讲述线程、进程和协成?

1)为什么引入:

操作系统可以同时运行多个任务,引入了线程,进程和协成

2)定义:

线程: 可以理解成执行代码的分支,线程是执行对应的代码的,cpu会调度对应的线程去工作,也可以说线程是cpu调度的基本单位(工作原理)
进程: 通俗理解一个运行起来的程序或者软件叫做进程
如何理解进程:把进程想成现实生活中的公司,公司可以给员工提供办公资源(办公桌椅,办公电脑等资源), 真正干活的是员工,所以员工可以想成线程,公司就是进程

协成:又称为微线程,也称为用户级线程,在不开辟线程的基础上完成多任务,在def里面只看到一个yield关键字可以理解程是协程(理解), 在单线程的基础上可以完成多任务,多个任务按照一定顺序交替执行(目的)

3)使用:

进程、线程和协成的使用对比
2.1 线程是cpu调度的基本单位,通过线程去执行进程中代码, 线程是执行代码的分支
2.2 进程是操作系统资源分配的基本单位,每启动一个进程都需要向操作系统索要运行资源,默认一个进程只有一个线程,线程是依附在进程里面的
2.3 多进程开发比单进程多线程开发稳定性要强,但是多进程开发比多线程开发资源开销要大
2.4 多进程开发某个进程死了不会影响其它进程的运行,但是多线程开发该进程死了那么这些线程都要进行销毁
2.5 进程之间不共享全局变量,线程之间共享全局变量,但是线程要注意资源竞争的问题
线程之间共享全局变量:
同步就是协同步调,按预定的先后次序进行运行线程同步可以解决共享全局变量的问题
从而引入了互斥锁,互斥锁确保了某段关键代码只能由一个线程从头到尾完整地执行,在使用过程中要避免出现死锁
进程之间不共享全局变量:
多进程之间不共享全局变量,为了进程间的通讯,引入Queue这个类
2.6 先有进程,然后进程可以创建线程,线程是依附在进程里面的,线程里面可以包含多个协程
2.7 多线程开发线程之间执行是无序的,协程之间执行按照一定顺序交替执行
2.8 协程以后主要用在网络爬虫和网络请求,开辟一个协程大概需要5k空间,开辟一个线程需要512k空间, 开辟一个进程占用资源最多

附录:

对于线程的使用
1.线程之间执行是无序(对比中已包含)

2.主线程会等待所有的子线程执行完成以后程序再退出,daemon=True 表示守护主线程,主线程退出子线程直接销毁不再执行对应的代码

3.多线程共享全局变量(对比中已包含)
4.互斥锁: 能保证同一时刻只有一个线程去执行代码,具体那个线程抢到锁我们决定不了,但是加上互斥锁多任务瞬间变成单任务变成单任务性能会下降(对比中已包含)

5.死锁:一直等待对方释放锁的情景就叫做死锁,工作中避免死锁的出现,要在适当的地方释放锁(对比中已包含)

对于进程的使用:
1.多进程之间不共享全局变量,为了进程间的通讯,引入Queue这个类(对比中已包含)

2.向队列里面放入数据统一put方法,获取数据的使用同一使用get方法

3.主进程会等待所有的子进程执行完成以后程序再退出,设置守护主进程,主进程退出后子进程直接销毁 sub_process.daemon = True
主进程退出之前先让子进程直接销毁,然后主进程就可以退出了:sub_process.terminate()

通过进程池完成对应的任务
同步执行:一个任务执行完成另外一个任务才能执行 pool.apply(copy_work) 资源竞争时使用
使用异步方式用进程池执行对应的任务:pool.apply_async(copy_work)

5.创建进程池中的queue时,使用异步执行对应的任务,执行异步任务会返回一个应用结果对象,这个对象里面有一个wait()方法可以等待异步任务执行完成以后代码再继续往下执行

对于协成的使用:
gevent封装是greenlet,可以根据耗时操作自动完成协程之间的切换执行

打补丁,让gevent框架识别耗时操作,比如:time.sleep,网络请求延时,monkey.patch_all()

创建协程指定对应的任务
*args: 以位置方式传参
**kwargs: 以关键字方式传参
g1 = gevent.spawn(download_img, img_url1, “1.jpg”)

主线程等待所有的协程执行完成以后程序再退出
gevent.joinall([g1, g2, g3])

更多见:https://blog.csdn.net/sinat_41912529/article/details/80306582

转载于:https://www.cnblogs.com/Dark-fire-liehuo/p/10061721.html

线程、进程和协成对比相关推荐

  1. python协程和线程_python之并发编程(线程\进程\协程)

    一.进程和线程 1.进程 假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源.是 ...

  2. python apply_async死锁_python之并发编程(线程\进程\协程)

    一.进程和线程 1.进程假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源.是不 ...

  3. 十四丶并发编程(线程 进程 协程)

    Yuan先生 知识预览 操作系统 回到顶部 操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各种其他输入输出设备组成的复杂系 ...

  4. python的线程如何启用和结束_python线程进程

    操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各种其他输入 输出设备组成的复杂系统,每位程序员不可能掌握所有系统实现的细节 ...

  5. python提高——进程、线程、协程对比及代码实现

    目录 1多任务 1.1并发 1.2并行 2线程 2.1引入线程 2.2线程进行顺序 2.3线程封装 2.4多线程-共享全局变量 2.5资源竞争 2.6互斥锁 2.7死锁 3进程 3.1进程创建 3.2 ...

  6. 进程、线程、协程对比

    进程.线程对比 功能 进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口 定义的不同 进程是系统进行资源分配和调度的一个独立单位. 线程 ...

  7. 进程线程协程对比(通俗)

    以下的总结是我在学习网课时,总结的老师的学习笔记. 可惜不知道这个老师是谁,只想说这个老师讲的特别好! 进程.线程.协程 对比 请仔细理解如下的通俗描述 有一个老板想要开一个工厂进行生产某件商品(例如 ...

  8. Python进程、线程、协成

    什么是线程? 程序执行的最小单位 线程是进程中的一个实体,是被系统独立调度和分派的基本单位 线程的创建 threading.Thread(target = 变量名) 线程的资源竞争问题 线程是可以资源 ...

  9. python线程池模块_python并发编程之进程池,线程池,协程

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  10. 线程 、进程、协程 三者区别

    从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务. 一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都是一种CPU的执行单元. 进程:表示一个程序的上下文 ...

最新文章

  1. Express应用配置端口
  2. 【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )
  3. Visual Studio 2015安装教程(附激活码)
  4. mqtt js 中乱码_mqtt之上RRPC同步调用实战
  5. Windows 2008 R2安装DHCP服务器问题及解决方法
  6. android 事件分发
  7. Web开发技巧:使用自定义数据属性创建弹出窗口
  8. 如何自定义FusionCharts图表上的工具提示?
  9. 注解定时器_细数那些使用过的定时器
  10. 【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps...
  11. NAR:eggNOG 5—蛋白功能层级注释数据库
  12. PyQt4-入门学习(1)
  13. 【论文阅读】基于强化学习的网络安全防护策略
  14. java script是什么_Java Script的工作原理是什么?怎样用它来生成简单的
  15. RestTemplate源码剖析:Encode
  16. Fusion APP-添加检查软件更新功能
  17. VMI - 供应商管理库存
  18. 新房和二手房的优缺点
  19. Android MD5加密法
  20. opencv处理图片批量添加噪声、以及光照、黑暗处理

热门文章

  1. 用GNS3制作路由交换网络拓扑图
  2. Java的随机数原理
  3. P68是什么意思 IP67和IP68等级有什么区别
  4. php漂浮广告代码,JS随机漂浮广告代码具体实例
  5. 大恒MER-1070-10GC相机 LINUX环境 QT开发记录
  6. Eclipse中文版的,怎么变成英文版
  7. 详解电商订单逻辑流程图
  8. 如何读一篇论文,笔记
  9. 成功解决AttributeError: ‘Series‘ object has no attribute ‘split‘
  10. mariadb特有函数