并发、并行、同步、异步、阻塞、非阻塞

一、多核、多cpu

(一)多核 Multicore
核是CPU最重要的部分。负责运算。核包括控制单元、运算单元、寄存器等单元。
多核就是指单个CPU中有多个核。

(二)多cpu Multiprocessor
多cpu就是一个系统拥有多个CPU。每个CPU可能有单个核,也可能有多个核。

(三)区别
多核CPU和多CPU的区别主要在于性能和成本。
多核CPU性能最好,但成本最高;
多CPU成本小,但性能较差。

二、并发、并行

(一)并发 Concurrency
并发是多个事件在同一时间段内发生,并不是在同一个时刻发生。通过频繁的分时交替运⾏,给⼈的感觉是同时运⾏,因为分时交替运⾏的时间是⾮常短的。比如执行0.001sA,然后暂停A,执行0.001sB,然后暂停B,执行0.001sA,如此反复。

(二)并行 Parallelism
并行是指多个事件在同一时刻发生。比如同时执行A和B。

(三)并发和并行的区别
并发是轮流处理,而并行是同时处理。
并发和并行的区别就是一个人同时吃三个菜和三个人每人吃一个菜;
单核不能并行,只能并发。
多核或者多cpu既能并行,也能并发。

1.并行,但不并发
执行完A才能执行B,但执行A时,其中的各个子任务可以在同一时刻同时执行。
2.并发,但不并行
执行A时,可以突然中断A转去执行B,执行完B后再去执行A。
3.并发且并行
执行A和B时不仅可以互相打断,还可以在同一时刻同时执行A和B。

三、进程、线程、协程

(一)进程 Process
进程是程序的一次执行过程。
每个进程都有⼀个独⽴的内存空间,拥有自己独立的堆和栈,既不共享堆,亦不共享栈。
同一个程序可以执行多次,这样就产生了多个进程,这多个进程都是独立的。类似于一个类产生多个实例。
进程由操作系统调度。
进程可以创建子进程。

(二)线程 Thread
线程是进程中的⼀个执⾏单元,负责当前进程中程序的执⾏,⼀个进程中⾄少有⼀个线程。
线程拥有自己独立的栈和共享的堆,共享堆,不共享栈。
线程亦由操作系统调度。

单线程和多线程
1.单线程
当进程只有一个线程时,就是单线程。
2.多线程
当进程有多个线程时,就是多线程。

(三)协程 Coroutine
协程,又称微线程,纤程。
协程和线程一样共享堆,不共享栈,但协程由程序员调度。同时,协程也无法使用多核。

(四)多线程与多进程的区别
多线程与多进程的目的都是想尽可能的利用CPU资源,减少CPU的空闲时间,特别是多核环境。
多进程:它最大的优点是稳定性高,因为一个子进程崩溃,不会影响其他进程;但创建进程的开销巨大,操作系统能同时运行的进程数也是有限的。
多线程:比多进程快,但是致命缺点是任何一个线程崩溃都造成整个进程的崩溃,因为所有线程共享进程的内存。

四、同步、异步

同步和异步关注的是消息通信机制。

(一)同步 synchronous
同步就是一个任务在执行某个请求的时候,如果这个请求返回需要很长时间,那么这个任务会不断询问是否已返回信息,直到收到返回信息才继续执行。

(二)异步 asynchronous
异步就是一个任务在执行某个请求的时候,它不会询问是否已返回,而是继续执行下面的操作,当返回信息时再通知这个任务。

(三)区别
区别在于消息通信方向相反。同步是调用方通知被调用方,异步是被调用方通知调用方。同步是调用方主动查询,异步是调用方被动接收。
比如,甲方委托乙方生产衣服,甲方隔两天问乙方生产完了吗,这叫同步;甲方不问,而是等到乙方生产完了通知甲方,这叫异步。

多线程和异步都可以避免阻塞,但异步和多线程不是一个概念。
多线程编程简单。有调度开销。并且线程间的共享变量可能造成死锁的出现。
异步使用回调的方式,没有调度开销,在设计良好的情况下,处理函数可以不必使用共享变量,减少了死锁的可能。编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与普通人的思维方式有些出入,而且难以调试。

适用范围
当需要执行I/O操作时,使用异步操作比使用多线程更合适。
长时间CPU运算的场合,使用多线程更合适。例如耗时较长的图形处理和算法执行。

五、阻塞、非阻塞

阻塞与非阻塞关注的是程序在等待调用结果时候的状态。涉及CPU线程调度。

(一)阻塞 Blocking
就是调用结果返回之前,该线程会挂起,不释放CPU执行权,但也不做其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行

(二)非阻塞 Non-blocking
就是在没有获取调用结果时,会释放cpu,cpu不会等待。
如果是同步的,通过轮询的方式检查有没有调用结果返回,如果是异步的,会通知回调

(三)区别
在于是否释放cpu
阻塞是cpu空转,白白浪费;
非阻塞是cpu不会空转。

例子
1.同步阻塞:
老张在厨房用普通水壶烧水,一直在厨房等着(阻塞),盯到水烧开(同步)
2.同步非阻塞:
老张在厨房用普通水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),然后时不时去厨房看看水烧开了没 (同步,主动询问)
3.异步阻塞:
老张在厨房用响水壶烧水,一直在厨房中等着(阻塞),不用盯着,而是等到水壶发出响声(异步),老张知道水烧开了
4.异步非阻塞:
老张在厨房用响水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),当水壶发出响声(异步),老张就知道水烧开了

例子
如果你想吃一份宫保鸡丁盖饭:
同步阻塞:你到饭馆点餐,然后在那等着,还要一边喊:好了没啊!
同步非阻塞:在饭馆点完餐,就去遛狗了。不过溜一会儿,就回饭馆喊一声:好了没啊!
异步阻塞:你到饭馆点餐,然后在那等着,不喊,而是等做好了给你端上来。
异步非阻塞:在饭馆点完餐,就去遛狗了。等做好了,饭店给你打电话。

六、io

I/O操作包括文件读写、数据库操作、网络请求等。
I/O操作不消耗CPU时间

在这里插入图片描述

同步阻塞IO(Blocking IO)BIO
同步非阻塞IO(Non-blocking IO)NIO
异步阻塞IO (IO multiplexing)IO多路复用
异步非阻塞IO 异步IO(Asynchronous IO)AIO

适用场景:
BIO适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,但程序直观简单易理解。
NIO适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂。
AIO使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂

七、多任务

要实现多任务,通常会设计成Master-Worker模式,Master负责分配任务,Worker负责执行任务;因此多任务环境下,通常是一个Master,多个Worker。
多任务可以使用多线程或者多进程。
如果用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker。
如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。
无论是多线程还是多进程,只要Worker数量一多,效率肯定上不去,因为Worker一多,CPU就忙着切换工作,根本没多少时间去执行任务了。

是否采用多任务,还得考虑任务类型。
可以把任务划分为计算密集型和IO密集型。
计算密集型任务的特点是大量的计算,消耗CPU的资源,比如视频解码、计算圆周率。这种任务同时进行的数量应当等于CPU的核心数,这么做是为了降低切换任务所需要的时间,并且它还适合使用运行效率高的代码编写
IO密集型任务特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成。对于这类任务,任务越多,CPU效率越高,但也有一个限度。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI:38-基于深度学习的抽烟行为检测

随着人工智能的迅猛发展,它在各个领域展现出了广泛的应用潜力。其中,基于深度学习的抽烟行为检测技术引起了人们的极大兴趣。这项技术利用计算机视觉和深度学习算法,能够自动检测和监测人们的抽烟行为,为烟草控制和公共卫生提供了新的手段。本文将深入探讨基于深度学习的抽…

SELECT COUNT(*)会不会导致全表扫描引起慢查询

SELECT COUNT(*)会不会导致全表扫描引起慢查询呢? SELECT COUNT(*) FROM SomeTable 网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小的辅助索引查询计数,其实反而性能最高&…

【C++】:内存管理

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…

1.MySQL库的操作

个人主页:Lei宝啊 愿所有美好如期而遇 1.创建数据库: 语法:create database if not exists db_name charset字符集 collate校验规则 ; if not exists ,charset ,collate可以不加,直接create database 数…

关于如何进行ChatGPT模型微调的新手指南

微调是指在预训练的模型基础上,通过进一步的训练来调整模型以适应特定任务或领域。预训练的模型在大规模的文本数据上进行了广泛的学习,从中获得了一定的知识和语言理解能力。然而,由于预训练并不针对具体任务,因此需要微调来使模…

【TensorFlow2 之011】TF 如何使用数据增强提高模型性能?

一、说明 亮点:在这篇文章中,我们将展示数据增强技术作为提高模型性能的一种方式的好处。当我们没有足够的数据可供使用时,这种方法将非常有益。 教程概述: 无需数据增强的训练什么是数据增强?使用数据增强进行训练可视…

隐马尔可夫模型(一)Evaluation

前提 import torch import torch.nn.functional as F N 3 # 离散隐变量可以取到的值的个数 M 2 # 可观测变量个数 pi F.softmax(torch.randn((N,1),dtypetorch.float32),dim0) # 初始状态概率矩阵 A F.softmax(torch.randn((N,N),dtypetorch.float32),dim-1) # 转移…

Linux8yum安装mysql5.7版本流程

Linux8yum安装mysql Linux8yum安装报错解决 yum安装流程 首先下载mysql的yum配置 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装mysql源 yum -y install mysql57-community-release-el7-11.noarch.rpm安装mysql yum -y install mysql-s…

【目标检测】大图包括标签切分,并转换成txt格式

前言 遥感图像比较大,通常需要切分成小块再进行训练,之前写过一篇关于大图裁切和拼接的文章【目标检测】图像裁剪/标签可视化/图像拼接处理脚本,不过当时的工作流是先将大图切分成小图,再在小图上进行标注,于是就不考…

Elasticsearch:使用 Langchain 和 OpenAI 进行问答

这款交互式 jupyter notebook 使用 Langchain 将虚构的工作场所文档拆分为段落 (chunks),并使用 OpenAI 将这些段落转换为嵌入并将其存储到 Elasticsearch 中。然后,当我们提出问题时,我们从向量存储中检索相关段落,并使用 langch…

Google SGE 正在添加人工智能图像生成器,现已推出:从搜索中的生成式 AI 中获取灵感的新方法

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

1688拍立淘接口,按图搜索1688商品接口,图片搜索商品接口,1688API接口

按图搜索1688商品的方法如下: 打开1688平台,点击首页右上角的搜索框,进入搜索页面。 点击搜索框右侧的相机图标,选择“拍照”或“相册”,上传你想要搜索的图片。 等待图片上传完成,系统会自动识别图片中的…

基于Effect的组件设计 | 京东云技术团队

Effect的概念起源 从输入输出的角度理解Effect https://link.excalidraw.com/p/readonly/KXAy7d2DlnkM8X1yps6L 编程中的Effect起源于函数式编程中纯函数的概念 纯函数是指在相同的输入下,总是产生相同的输出,并且没有任何副作用(side effect)的函数。…

Qt QMultiMap

QMultiMap 文章目录 QMultiMap摘要QMultiMapQMultiMap 特点代码示例 关键字: Qt、 QMultiMap、 容器、 键值、 键值重复 摘要 今天在观摩小伙伴撸代码的时候,突然听到了QMultiMap自己使用Qt开发这么就,竟然都不知道,所以趁没…

sentinel的启动与运行

首先我们github下载sentinel Releases alibaba/Sentinel (github.com) 下载好了后输入命令让它运行即可,使用cmd窗口输入一下命令即可 java -Dserver.port8089 -jar sentinel-dashboard-1.8.6.jar 账号密码默认都是sentinel 启动成功后登录进去效果如下

ABAP 采购组 条目 Z001 不存在T161内-请检查输入

背景:在ALV报表更改PR采购组 做法:ALV报表取出PR相关数据,直接将采购组列设置为可编辑,然后设置按钮更改逻辑。 操作:将采购组值更新(从原来500改为600),然后点更改功能按钮&#xf…

汽车一键启动点火开关按键一键启动按钮型号规格

汽车点火开关/移动管家一键启动按键/汽车改装引擎启动按钮型号:YD828溥款开关 一键启动按钮(适用于配套启动主机使用或原车一键启动开关更换) 1.适合配套专用板板安装 2.开孔器开孔安装 3.原车钥匙位安装 外观:黑色 按钮上有3种不…

SpringBoot 前端406 后端Could not find acceptable representation

原因:返回对象没有get方法,无法转成JSON格式

Elasticsearch:什么是检索增强生成 - RAG?

在人工智能的动态格局中,检索增强生成(Retrieval Augmented Generation - RAG)已经成为游戏规则的改变者,彻底改变了我们生成文本和与文本交互的方式。 RAG 使用大型语言模型 (LLMs) 等工具将信息检索的能力与自然语言生成无缝结合…

Linux系统下centos中在线添加硬盘后不重启在线扩容linux系统目录不重启系统

Centos7 在线添加硬盘不重启系统 CentOS 7在线添加新磁盘,无需重启 现有环境基本都是线下server以及线上虚拟机等,几乎都支持热插拔,热扩容,所以在线添加新磁盘就尤为重要,这样可以无需中断当前服务或进程也可对其进行添加硬盘操作。 1.添加硬盘: 虚拟机在线状态下对其进行添加…