进程线程协程素质三连

举报
冬晨夕阳 发表于 2022/03/30 00:54:07 2022/03/30
【摘要】 今天被问了进程和线程是什么? 按概念回答了 “进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。 然后追问,为什么线程是操作系统调度的最小单元? 一条线程是进程中一个单一顺序的控制流,一...

今天被问了进程和线程是什么?
按概念回答了 “进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。

然后追问,为什么线程是操作系统调度的最小单元?
一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

又问,进程如何并发多个线程? 卒。
单个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)协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

文章来源: blog.csdn.net,作者:考古学家lx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_43582101/article/details/89980378

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。