程序员不得不消化的基本概念:线程与协程,并行与并发

news2024/11/20 11:41:37

这是程序员的基本常识,这都搞不清楚,就不配为码农,就不配混CSDN。为人君者,招聘时可以以此为入门问题。

名词解释

在中文里,并发与并行很难望文生义,从字面上很难了解确切含义,貌似区别不大,但从英文角度看就差别显著了。

  • 线程: thread, 是系统运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,是系统中独立运行的基本单位
  • 协程: coroutine,是程序中的一种组件,它允许在设置多个入口点和中断位置,将子程序泛化为非抢占式的多任务处理模式,是用户级线程的一种实现。
  • 并行: Parallelism,Parallelism means that an application splits its tasks up into smaller subtasks which can be processed in parallel, for instance on multiple CPUs at the exact same time.
  • 并发: Concurrency,Concurrency means that an application is making progress on more than one task at the same time (concurrently)

差异理解

协程(Coroutine)编译器级的,进程(Process)和线程(Thread)操作系统级的。也就是说,你可以开发一个协程库,但没法开发线程库,因为线程是操作系统资源,只能是操作系统提供。golang和kotlin语言里天然提供了协程库,Java没有,但借助于nio和线程也能实现。协程最轻量级,开销最小。线程和进程依次之。

协程为并发而生,线程为并行而生。所以关键点是理解并发和并行的差异。

在这里插入图片描述

先看看老外的解释吧:

A system is said to be concurrent if it can support two or more actions in progress at the same time. A system is said to be parallel if it can support two or more actions executing simultaneously.

并发就是多个事情都在“进行中” (in progress),但未必都在执行(may not be executed)
老外补充道:

Meanwhile, multiple actions are simultaneously executed in parallel systems. In fact, concurrency and parallelism are conceptually overlapped to some degree, but “in progress” clearly makes them different.

Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.

基本上是说清楚了。用中文总结一下:

  • 并行就是同一时刻我可以做多件事。
  • 并发是某一段时间我可以做多件事。但某一时刻我只能做一件事,可能我在做A,也可能在做B或C,整体效果上看A,B,C三件事情同时在做。多件事穿插进行。
  • 串行就是多个事情是排好序的,流水线方式执行的,未来某个时刻做哪件事是确定的。而并发是不确定的,未来某个时刻做哪件事是随机的,取决于调度程序。

大并发下的最佳实践就是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

参考

  • 线程和协程的区别的通俗说明
  • 进程、线程与协程概念解析
  • Concurrency vs. Parallelism — A brief view

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单机Redis、Redis持久化、Redis主从模式、Redis哨兵模式、Redis分片集群

一、单机Redis 数据库分类: 到目前为止,所有数据库分为两大类: RDBMS:关系型数据库,即传统数据库。 像MySQL、SQLServer、DB2、Sybase、SQLite、Oracle等等 以表的形式存储数据,表与表之间要维护数据的关系…

为什么投稿 SCI 被审稿人通过,又被编辑拒收?

有些作者在投稿过程中会遇到各种坑,不过有一种坑却最让作者痛心疾首,不知道大家有没有遇到过这样的状况: 审稿人建议接收,编辑却拒稿了; 或者审稿人建议拒稿,编辑却让自己改改再投? 有国外学者…

微服务: Seata AT springCloud整合分布式事务以配置方式(中篇)

目录 上篇: 安装seata 并启动成功的传送门 1. 前言: 2. springCloud 使用seata at 的步骤如下 第一步 查看springCloud版本 第二步添加maven依赖 第三步 添加yml配置 第四步: 配置数据源(druid) 第五步 修复一个警告 第六步: 启动后 看看日志是否成功 上篇: 安装seat…

边缘计算盒子功能介绍,为什么要用边缘计算盒子?

边缘计算盒子(Edge Computing Box)是一种用于边缘计算设备。边缘计算是一种分布式计算模型,它将计算和数据处理能力从传统的集中式云计算数据中心延伸到网络边缘的设备上,以便更快地响应实时数据处理需求和减少对云服务的依赖。 边…

HardenedVault 推出 Linux 安全加固版

导读HardenedVault 于 AWS 云平台上推出 Linux 安全加固版,该产品可以通过实施CIS和STIG基准来帮助您实现合规要求(PCI-DSS和GDPR)。 Shawn the R0ck 写道:HardenedVault自从 2022 年 7 月在 Amazon Web Services (AWS)推出了 Har…

Vscode运行Html的插件以及快速编写Html框架

然后我们点击创建文件,记住要以.html结尾 输入英文感叹号回车就行(记住要英文) 好了,希望小伙伴能快速入手VsCode,很好用的一款开源免费软件

基于Android的校园外卖系统app

一、项目介绍 Android客户端功能描述: 1:登录注册:用户可以通过自己的信息进行账号的注册 2:商家查看:查看发布的外卖商家信息 3:商家详情:用户点击某一个商家之后可以查看商家的地址和联系方…

AI人工智能在Python中构建回归器的原理、优缺点、应用场景和实现方法

回归器(Regressor)是一种常用的机器学习算法,可以用于预测数值型变量的值。在人工智能(Artificial Intelligence,简称AI)领域中,回归器是一种高效的算法,可以用于许多应用领域&#…

6.4.4最短路径问题-Floyd算法

原来在邻接矩阵种v2使无法到达v1的 但如果我们把v0作为中转站 不断增加中转点(1个中转点) 这里的path的值是中转点 v1到v2之间是没有中转点的。 这只是以一个中转点,more 路走得越多,会越来越小 广度优先遍历算法是遍历顶点和边…

(二)ArcGIS空间数据的转换与处理——矢量数据变换

ArcGIS空间数据的转换与处理——矢量数据变换 目录 ArcGIS空间数据的转换与处理——矢量数据变换 1.空间校正2.边匹配 数据变换是指对数据进行诸如放大、缩小、翻转、移动、扭曲等几何位置、形状和方位的改变等操作。对 矢量数据的相应操作可以通过 ArcMap 中空间较正 (Spatia…

录制屏幕怎么设置?怎么录制高画质的视频?

在今天的数字时代,屏幕录制已经成为了日常工作中不可或缺的一部分。许多人需要在电脑上录制屏幕来制作教程视频、演示文稿或者是游戏录像。本文将介绍如何在电脑上录制屏幕并获得高画质的视频。 屏幕录制软件的选择 要在电脑上录制高画质的视频,首先需要…

【1】机器学习

目录 1 机器学习概述 1.1 定义 1.2 基本方法 1.3 基本概念 1.4 有监督学习 1.5 无监督学习 1.6 过度拟合问题 模型过于复杂(例如参数过多) 正则化 1.7 模型选择 交叉验证 K折交叉验证 2 机器学习常用工具 3 Scikit-learn 3.1 基本流程 3.2 Scikit-learn常用函数 3.…

csdn Markdown编辑器

文章目录 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也是…

云视如何实现流量转化

云视如何实现流量转化 大家好我是小鱼 小伙伴很好奇 云视除了直播带货 打赏,广告 还有哪些方式 可以实现流量转化 今天我和大家分享一下这个话题 接下来我们要讲讲 我们要用的工具 优惠券 适用于刺激消费回流,构建闭环消费圈。 课程赠送 趣味推广营销&am…

平台使用篇 | 批处理(bat)脚本使用教程(三)

导读 本讲针对RflySim平台的一些特点简要介绍了平台使用批处理技术的原因,并根据CopterSim中仿真功能区的参数设置阐述了批处理技术在平台中的具体运用。 平台使用篇 | 批处理(bat)脚本使用教程(三) RflySim平台使用批处理技术的原因 ①调用多个软件Rf…

吲哚菁绿ICG-Amine/NH2荧光标记和成像1686147-55-6

ICG-Amine是一种荧光染料,ICG-Amine具有良好的荧光性能,可用于生物医学研究中的荧光标记和成像。ICG-Amine的物理性质如下:化学式:C47H56N4O4S,分子量为773.04,外观:深绿色粉末溶解性&#xff1…

代码随想录算法训练营第四十八天 | 树形dp

198.打家劫舍 文档讲解:代码随想录 (programmercarl.com) 状态:看了“决定dp[i]的因素才做出来"。 思路 当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 所以这里就更感觉到,当前状态和前面状态会有一种依赖关系&#xf…

点云重建总结

几何处理和三维视觉 几何处理:是一种计算的方法研究世界中的物理对象,通过硬件扫描生成物理对象的三维模型然后做各种处理和分析。 三维视觉:传统的3D视觉是指从图像中恢复底层的三维结构。 1 几何重建 1.1几何重建的基本流程 扫描&…

宝塔PHP7.1版本37个扩展作用介绍

PATH_INFO:这个扩展可以让PHP获取到URL中的PATH_INFO信息,方便处理URL路由。 bt_safe:这个扩展可以帮助PHP防止一些常见的安全漏洞,比如SQL注入、XSS攻击等。 ionCube:这个扩展可以对PHP代码进行加密,保护…

Linux——线程7|线程池

线程池 线程池以空间换时间,预先申请一批线程,当有任务到来,直接指派线程。 由于这是类的成员函数,因此传参的时候会有一个this指针,我们如果想在传参的时候不传这个this指针,我们只需加上static。 这里只传一个参数,是因为我们的routine是这种类型的