进程线程协程素质三连

网友投稿 710 2022-05-29

今天被问了进程和线程是什么?

按概念回答了 “进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。

然后追问,为什么线程是操作系统调度的最小单元?

一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

又问,进程如何并发多个线程? 卒。

单个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)协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:区块链学习笔记:D03 区块链在各行业领域的应用(一)
下一篇:人工录入图片文字信息行不通!OCR识别工具更方便
相关文章