进程线程协程素质三连
今天被问了进程和线程是什么? 按概念回答了 “进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。
然后追问,为什么线程是操作系统调度的最小单元? 一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
又问,进程如何并发多个线程? 卒。 单个CPU(也可以多个CPU)将多个线程中的每个线程(多个进程中的每个进程)按时间分为一个一个的时间片,每一个时刻只执行某个线程(进程)的时间片,时间片过期后转而执行下一个线程(进程)的时间片。
没完,如何实现多进程: 就记得用multiprocessing来写。卒
Python实现多进程的几种方式:
- 方式一: os.fork()
- 方式二: 使用multiprocessing模块: 创建Process的实例,传入任务执行函数作为参数
- 方式三: 使用multiprocessing模块: 派生Process的子类,重写run方法
- 方式四: 使用进程池Pool
接着协程是啥: 协程是一种用户态的轻量级线程。是一次异步操作
然后问什么是异步: 卒 为完成某个任务,不同程序单元之间过程中无需通信协调,也能完成任务的方式,不相关的程序单元之间可以是异步的。 例如,爬虫下载网页。调度程序调用下载程序后,即可调度其他任务,而无需与该下载任务保持通信以协调行为。不同网页的下载、保存等操作都是无关的,也无需相互通知协调。这些异步操作的完成时刻并不确定。简言之,异步意味着无序。
协程的优点: 卒 (1)无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能(但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力) (2)无需原子操作锁定及同步的开销 (3)方便切换控制流,简化编程模型 (4)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。 协程的缺点: 卒 (1)无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。 (2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序
三者的区别: 卒 (1)进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 (2)线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。 (3)协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。
相关文章
- 使用6款卓尔不群的Linux操作系统为你的上网本添活力
- Linux系统里如何彻底的清空终端屏幕?
- 消息队列(MQ)重磅推出MQTT移动物联套件
- 树莓派使用实例之:2 Pi R
- 每日Ubuntu小技巧——在Ubuntu中使用音乐软件“声破天”Spotify
- 每日 Ubuntu 小技巧——关闭 Ubuntu 中的关机/重启确认
- 在Linux系统下玩《炉石传说:魔兽英雄传》
- 数据挖掘与数据化运营实战. 1.2 数据化运营的主要内容
- 如何在Linux上提高文本的搜索效率
- 数据挖掘与数据化运营实战. 1.3 为什么要数据化运营
- Google账户两步验证是如何工作的?
- 数据挖掘与数据化运营实战. 1.4 数据化运营的必要条件
- 数据挖掘与数据化运营实战. 1.5 数据化运营的新现象与新发展
- 用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性
- Linux中的more命令-逐页显示长文本文件
- 互联网企业安全高级指南1.1切入“企业安全”的视角
- 数据挖掘与数据化运营实战. 3.7 服务保障模型
- 互联网安全高级开发指南导读
- 数据挖掘与数据化运营实战. 3.11 商品推荐模型
- 数据挖掘与数据化运营实战. 3.12 数据产品