并发使用场景分析(多进程,多线程,IO多路复用)


并发使用场景

首先对不同语言使用的并发方式进行概括:

多进程多线程IO多路复用
Python计算密集型IO密集型(请求需要长期占有服务)IO密集型
其它语言-计算密集型IO密集型
底层语言(C,C++)功能独立关联性强的功能IO密集型

关于并发编程具体概念及用法请查看:https://blog.csdn.net/qq_45305211/article/details/99007396

相关概念

IO:在内存中存在数据交换的操作认为是IO操作,比如和终端交互 ,和磁盘交互,和网络交互等

计算密集型程序:程序运行中计算较多,IO操作相对较少。cpu消耗多,执行速度快,几乎没有阻塞。

IO密集型程序:在程序执行中有大量IO操作,而cpu运算较少。消耗cpu较少,耗时长。多阻塞,高延迟


进程(Process)是程序在计算机中的一次运行。对于操作系统来说,进程就是一次执行的任务,比如我们打开了一个Word,计算机就执行了一个Word进程。对我们生活中好比家人们的一次大扫除。

虽然说进程是一个执行的任务,但有些任务会分为很多小任务,即任务分支。如上文所说的Word进程,它同时运行了打字、拼写检查、打印等任务。而对于大扫除来说,可能就是我在刷马桶,妹妹在扫地,弟弟在擦窗户等。

而这些任务的分支,就是线程(Thread)。

因为进程肯定会执行至少一项任务,那么进程就至少包含一个线程,甚至更多。

我们的计算机不会同时只运行一项任务,而是多个任务同时进行,比如你在某站看小视频的同时还可以聊wx(这是不同的进程)。这得益于我们的多核计算机,多个CPU可以同时运行多个进程。

那么想要同时执行多个任务,可以同时启动多个进程,也可以启动一个进程,进程中包含多个线程,当然同时启动多个进程,进程中包含多个线程也是可以的。还有就是还未提起的IO多路复用。

那么具体该使用哪种呢?下面先介绍进程,线程,及IO多路复用的特点,然后再进行分析。

进程及特点

  • 程序在计算机中的一次运行。

  • 是一个动态的过程描述,占有计算机运行资源,有一定的生命周期。

  • 进程之间的运行互不影响,各自独立

  • 每个进程拥有独立的空间,各自使用自己的空间资源

  • 进程的创建和销毁过程消耗的资源较多

  • 当任务量众多,每个任务在很短时间内完成时,需要频繁的创建和销毁进程。

  • 多进程可以更充分使用计算机多核资源

线程及特点

  • 线程被称为轻量级的进程

  • 线程也可以使用计算机多核资源,是多任务编程方式

  • 线程是系统分配内核的最小单元

  • 线程可以理解为进程的分支任务

  • 一个进程中可以包含多个线程

  • 线程也是一个运行行为,消耗计算机资源

  • 一个进程中的所有线程共享这个进程的资源

  • 多个线程之间的运行互不影响各自运行

  • 线程的创建和销毁消耗资源远小于进程

  • 各个线程也有自己的ID等特征

IO多路复用

什么是IO阻塞

  • 在执行IO操作时如果执行条件不满足则阻塞
    比如:input()函数,当程序运行到此函数处,如果没有输入,则程序不会往下执行,即进入了阻塞。
  • 处理IO的时间较长产生的阻塞状态

当一个IO阻塞时,别的IO行为也不会执行。

什么是IO多路复用

  • 系统同时监控多个IO事件,当哪个IO事件准备就绪就执行哪个IO事件。以此形成可以同时处理多个IO的行为,避免一个IO阻塞造成其他IO均无法执行,提高了IO执行效率。
多进程多线程IO多路复用
资源消耗最多较多最少

什么是GIL :

  • 由于python解释器设计中加入了解释器锁,导致python解释器同一时刻只能解释执行一个线程,大大降低了线程的执行效率。
  • 因为遇到阻塞时线程会主动让出解释器,去解释其他线程。所以python多线程在执行多阻塞高延迟IO时可以提升程序效率,其他情况并不能对效率有所提升。

1.程序运行中计算较多,IO操作相对较少,即计算密集型程序

  • 此时阻塞较少,并且由于Python中GIL的原因,对于计算密集型任务,Python下比较好的并行方式是使用多进程,这样可以非常有效的使用CPU资源。当然同一时间执行的进程数量取决你电脑的CPU核心数。

2.在程序执行中有大量IO操作,而cpu运算较少,即IO密集型程序

  • IO多路复用是专门用来解决IO事件的,故而IO密集型程序适合使用 IO多路复用。
  • 由于Python中使用了全局解释锁GIL的概念,导致Python中的多线程并不是并行执行,而是“交替执行”,所以Python中的多线程适合IO密集型任务,而不适合计算密集型任务。
  • 请求需要长期占有服务的时候,使用多线程
  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值