首页 > 其他分享 >并发/并行/同步/异步概念

并发/并行/同步/异步概念

时间:2023-05-12 17:56:06浏览次数:29  
标签:异步 协程 并行 应用程序 并发 线程 内核 进程

1、应用程序和内核

内核具有最高权限,可以访问受保护的内存空间,可以访问底层的硬件设备。而这些是应用程序所不具备的,但应用程序可以通过调用内核提供的接口来间接访问或操作。所谓的常见的 IO 模型就是基于应用程序和内核之间的交互所提出来的。以一次网络 IO 请求过程中的 read 操作为例,请求数据会先拷贝到系统内核的缓冲区(内核空间),再从操作系统的内核缓冲区拷贝到应用程序的地址空间(用户空间)。而从内核空间将数据拷贝到用户空间过程中,就会经历两个阶段:

  • 等待数据准备
  • 拷贝数据

也正因为有了这两个阶段,才提出了各种网络 I/O 模型。

2、同步和异步

同步(Synchronised)和异步(Asynchronized)的概念描述的是应用程序与内核的交互方式。

  • 同步是指应用程序发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行。
  • 异步是指应用程序发起 I/O 请求后仍继续执行,当内核 I/O 操作完成后会通知应用程序,或者调用应用程序注册的回调函数。

3、阻塞和非阻塞

阻塞和非阻塞的概念描述的是应用程序调用内核 IO 操作的方式。

  • 阻塞是指 I/O 操作需要彻底完成后才返回到用户空间。
  • 非阻塞是指 I/O 操作被调用后立即返回给用户一个状态值,无需等到 I/O 操作彻底完成。

4、并发和并行

并发,在操作系统中,是指 一个时间段 中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

  • 并发(concurrency):逻辑上具备同时处理多个任务的能力。
  • 并行(parallesim):物理上在同一时刻执行多个并发任务,依赖多核处理器等物理设备。

多线程或多进程是并行的基本条件,但单线程也可用协程做到并发。通常情况下,用多进程来实现分布式和负载平衡,减轻单进程垃圾回收压力;用多线程抢夺更多的处理器资源;用协程来提高处理器时间片利用率。现代系统中,多核 CPU 可以同时运行多个不同的进程或者线程。所以并发程序可以是并行的,也可以不是。

5、进程/线程/协程

进程(process)

  • 进程是资源分配的最小单位
  • 进程间不共享内存,每个进程拥有自己独立的内存
  • 进程间可以通过信号、信号量、共享内存、管道、队列等来通信
  • 新开进程开销大,并且 CPU 切换进程成本也大
  • 进程由操作系统调度
  • 多进程方式比多线程更加稳定

线程(thread)

  • 线程是程序执行流的最小单位
  • 线程是来自于进程的,一个进程下面可以开多个线程
  • 每个线程都有自己一个栈,不共享栈,但多个线程能共享同一个属于进程的堆
  • 线程因为是在同一个进程内的,可以共享内存
  • 线程也是由操作系统调度,线程是 CPU 调度的最小单位
  • 新开线程开销小于进程,CPU 在切换线程成本也小于进程
  • 某个线程发生致命错误会导致整个进程崩溃
  • 线程间读写变量存在锁的问题处理起来相对麻烦

协程(coroutine)

  • 对于操作系统来说只有进程和线程,协程的控制由应用程序显式调度,非抢占式的
  • 协程的执行最终靠的还是线程,应用程序来调度协程选择合适的线程来获取执行权
  • 切换非常快,成本低。一般占用栈大小远小于线程(协程 KB 级别,线程 MB 级别),所以可以开更多的协程
  • 协程比线程更轻量级

标签:异步,协程,并行,应用程序,并发,线程,内核,进程
From: https://www.cnblogs.com/Andrew-Zhou/p/17395895.html

相关文章

  • nginx 并发限制limit_conn启动不了nginx
    直接在http下写limit_conn启动不了nginx基本语法limit_conn指令的基本语法为:limit_connconnlimit;1其中,connlimit为最大并发连接数。一旦某时刻,连接数超过该值,Nginx将返回503错误页面并关闭新连接的接入。使用error_page指令可对此页面进行自定义配置。除了主要指令之......
  • php 异步形式调取导出数据
    php部分ajax请求此部分functionaysncexec(){$lock_file='filelock.lock';if(file_exists($lock_file)){exit(json_encode(array('code'=>0)));}$url=base_url().'execcmd';......
  • 《asyncio 系列》11. asyncio 的并发原语(锁、信号量、事件、条件)
    楔子使用多线程和多进程编写应用程序时,需要考虑非原子操作时的竞态条件,因为即使是并发增加整数这样简单的操作也可能导致微妙的、难以重现的bug。而asyncio是单线程的(除非与多线程和multiprocessing进行交互),这是否意味着我们就可以不必考虑竞争条件呢?事实证明,事情并非那么简......
  • 异步机无感算法解析 提供推导文档,模型,代码…… md500
    异步机无感算法解析提供推导文档,模型,代码……md500ID:442500634075285690......
  • python异步正则字符串替换,asyncio异步正则字符串替换re
     自然语言处理经常使用re正则模块进行字符串替换,但是文本数量特别大的时候,需要跑很久,这就需要使用asyncio异步加速处理importpandasaspdimportreimportasynciodata=pd.read_csv("guba_all_post_20230413.csv")data.dropna(inplace=True)#defreplace_betwee......
  • python异步字符串查找,asyncio和marisa_trie
     自然语言处理当中经常需要字符串的查找操作,比如通过查找返回字串在文本当中的位置,比如通过匹配实现的nerimportpandasaspdimportasyncio#data=pd.read_csv("guba_fc_result_20230413.csv")data=pd.read_csv("guba_all_post_20230413.csv")filename="cate_gr......
  • SpringBoot 接口并发限制(Semaphore)
    可以使用JMeter辅助测试 https://blog.csdn.net/weixin_45014379/article/details/124190381@RestController@RequestMapping({"/Test"})publicclasstest{Loggerlogger=LoggerFactory.getLogger(this.getClass());//使用Semaphore并发限制3个超过阻......
  • 实现高并发秒杀的 7 种方式,写的太好了,建议收藏!!
    1.引言高并发场景在现场的日常工作中很常见,特别是在互联网公司中,这篇文章就来通过秒杀商品来模拟高并发的场景。文章末尾会附上文章的所有代码、脚本和测试用例。本文环境:SpringBoot2.5.7+MySQL8.0X+MybatisPlus+Swagger2.9.2模拟工具:Jmeter模拟场景:减库存->创建......
  • 异步电机的VVVF的C代码+仿真模型,C代码可直接在simulink模型里进行在线仿真,所见即所得,
    异步电机的VVVF的C代码+仿真模型,C代码可直接在simulink模型里进行在线仿真,所见即所得,仿真模型为离散化模型,C代码嵌入到模型里进行在线仿真,仿真通过后可以直接移植到各种MCU芯片里:1.直接带满载启动,转速超调小,控制精度高2.四种不同的VF曲线可供选择:直线VF,分段VF,抛物线VF,S......
  • 异步电机的旋转高频电压注入算法FOC,全套C代码+仿真模型,已经在实际的工程项目项目中加
    异步电机的旋转高频电压注入算法FOC,全套C代码+仿真模型,已经在实际的工程项目项目中加以应用:1.在定子电压的两相同步静止坐标系(α,β轴)下注入旋转高频电压,然后通过转子位置观测器实现转子机械转速与转子磁链电角度的精确估算;2.能够实现电机低速段带重载运行工况下的高精度无传感器......