关于高并发你必须知道的几个概念

news2024/10/6 6:00:19

🎈个人公众号:🎈 :✨✨✨ 可为编程✨ 🍟🍟
🔑个人信条:🔑 为与不为皆为可为🌵
🍉本篇简介:🍉 本篇记录高并发必须知道的几个概念,如有出入还望指正。

关注公众号【可为编程】回复【面试】领取2023年最新面试题!!!

同步(Synchronous)和异步(Asynchronous)

同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程中“真实”地执行。整个过程,不会阻碍调用者的工作。

图片

上图中显示了同步方法调用和异步方法调用的区别。对于调用者来说,异步调用似乎是一瞬间就完成的。如果异步调用需要返回结果,那么当这个异步调用真实完成时,则会通知调用者。

并发(Concurrency)与并行(Parallelism)

并发和并行是两个非常容易被混淆的概念。他们都可以表示两个或者多个任务一起执行,但是侧重点有所不同。并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的,而并行是真正意义上的“同时执行”,下图很好地诠释了这点。

图片

从严格意义上来说,并行的多任务是真的同时执行,而对于并发来说,这个过程只是交替的,一会执行任务A,一会执行任务B,系统会不停地在两者之间切换。但对于外部观察者来说,即使多个任务之间是串行并发的,也会造成多任务间并行执行的错觉。

并发说的是在一个时间段内,多件事情在这个时间段内交替执行

并行说的是多件事情在同一个时刻同时发生。

实际上,如果系统内只有一个CPU,而使用多进程或者多线程任务,那么真实环境中这些任务不可能是真实并行的,毕竟一个CPU一次只能执行一条指令,在这种情况下多进程或者多线程就是并发的,而不是并行的(操作系统会不停地切换多任务)。真实的并行也只可能出现在拥有多个CPU的系统中(比如多核CPU)。

关注公众号【可为编程】回复【面试】领取2023年最新面试题!!!

临界区

临界区用来表示一种公共资源或者说共享数据,可以被多个线程使用,但是每一次只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源就必须等待。

比如,一个办公室里有一台打印机,打印机一次只能执行一个任务。如果小王和小明同时需要打印文件,很明显,如果小王先发了打印任务,打印机就开始打印小王的文件,小明的任务就只能等待小王打印结束后才能打印,这里的打印机就是一个临界区的例子。

在并行程序中,临界区资源是保护的对象,如果意外出现打印机同时执行两个任务的情况,那么最有可能的结果就是打印出来的文件是损坏的文件,它既不是小王想要的,也不是小明想要的。

阻塞(Blocking)和非阻塞(Non-Blocking)

阻塞和非阻塞通常用来形容很多线程间的相互影响。比如一个线程占用了临界区资源,那么其他所有需要这个资源的线程就必须在这个临界区中等待。等待会导致线程挂起,这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其他线程阻塞在这个临界区上的线程都不能工作。

非阻塞的意思与之相反,它强调没有一个线程可以妨碍其他线程执行,所有的线程都会尝试不断向前执行。

死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)

死锁饥饿活锁都属于多线程的活跃性问题。如果发现上述几种情况,那么相关线程就不再活跃,也就是说它可能很难再继续往下执行了。

死锁应该是最糟糕的一种情况了(当然,其他几种情况也好不到哪里去),如下图显示了一个死锁的发生:

图片

线程1有用资源A,占用A,对A上锁,线程2拥有资源B占用B,对B上锁,同时线程1请求资源B,线程2请求资源A,又因为资源都被占用,彼此都不会释放资源,那么这个状况将永远持续下去,谁都不可能拥有对方的资源,死锁是一个很严重的并且应该避免和实时小心的问题,后面的文章中会做更详细的讨论。

关注公众号【可为编程】回复【面试】领取2023年最新面试题!!!

饥饿是指线程因资源获取不足而无法继续执行的情况。可能的原因包括线程优先级过低,导致高优先级的线程不断抢占资源,使低优先级线程无法正常运行。在自然环境中,雏鸟因食物有限而无法获得足够的食物,这种情况与线程的饥饿相似。另外,某个线程一直占用关键资源,导致其他需要该资源的线程无法正常执行,也属于饥饿的一种。与死锁相比,饥饿问题可能在一段时间后得到解决,例如高优先级的线程完成任务后不再占用资源。

活锁是一种有趣的状况,类似于你和电梯外的人互相礼让导致无法通过的情况。如果线程的智能不足,且遵循“谦让”原则,主动释放资源给其他线程使用,就会导致资源在两个线程之间不断跳动,而没有一个线程能够同时获得所有资源并正常执行。这种情况就是活锁。

线程(Threads)与进程(Processes)

进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

进程的特质

动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的

并发性:任何进程都可以同其他进程一起并发执行

独立性:进程是系统进行资源分配和调度的一个独立单位

结构性:进程由程序,数据和进程控制块(PCB)三部分组成

线程:是程序执行的最小单元,使用多线程而不是多进程去进行并发程序的设计,是因为线程间的切换和调度的成本远远小于进程。

线程的状态

New:表示刚刚创建的线程,这种线程还没有开始执行

RUNNABLE:运行状态,线程的start()方法调用后,线程会处于这种状态

BLOCKED:阻塞状态。当线程在执行的过程中遇到了synchronized同步块,但这个同步块被其他线程已获取还未释放时,当前线程将进入阻塞状态,会暂停执行,直到获取到锁。当线程获取到锁之后,又会进入到运行状态(RUNNABLE

WAITING:等待状态。和TIMEWAITING都表示等待状态,区别是WAITING会进入一个无时间限制的等待,而TIMEWAITING会进入一个有限的时间等待,那么等待的线程究竟在等什么呢?一般来说,WAITING的线程正式在等待一些特殊的事件,比如,通过wait()方法等待的线程在等待notify()方法,而通过join()方法等待的线程则会等待目标线程的终止。一旦等到期望的事件,线程就会再次进入RUNNABLE运行状态。

TERMINATED:表示结束状态,线程执行完毕之后进入结束状态。

线程的所有状态在java.lang.Thread中的State枚举中定义。

关注公众号【可为编程】回复【面试】领取2023年最新面试题!!!

图片

两个定理

Amdahl定律(阿姆达定律)

Gustafson定律(古斯塔夫森定律)

感兴趣的小伙伴可以自行查阅。

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

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

相关文章

墨西哥专线港口通航情况

随着全球贸易的不断发展,墨西哥作为拉美地区的重要国家,其港口通航状况对于国际贸易具有重要意义。本文将从墨西哥专线港口的通航现状、通航瓶颈以及未来发展趋势等方面进行分析,以期为墨西哥港口的发展提供一些参考。 一、墨西哥专线港口的通…

使用Linux JumpServer 堡垒机进行远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…

有什么不起眼,却很挣钱的副业?

说两个真人真事儿: 1、我有一个表妹,去年生完孩子后,开始在家做视频剪辑工作。 主要是剪辑一些古装剧、家庭剧等视频,然后发布到抖音和快手等短视频平台。 她会把视频剪辑成一集一集的,先发布片段进行推广,如果用户觉得剧情吸引就提示他们可以付费购买全集。 我表妹…

JS:获取当前时间、计算2个时间的相差天数

前言 本文将介绍在js中对时间的一些操作,包括:获取当前的年、月、日;获取指定格式的时间;2个时间的相差天数等 基本操作 在js种可以使用特定的函数,获取当前的年、月、日等时间 date .getYear(); //获取当前年份(2…

动画云渲染要多少钱?云渲染怎么使用?

其实动画云渲染的具体费用会根据所使用的平台、渲染模式、渲染时间等因素而有所不同,具体还是要看你所使用的云渲染平台。下面我们以炫云云渲染为例,告诉你动画云渲染需要多少钱。 炫云云渲染是第一家实现一键云渲染的平台,是最早的一批云渲染…

公司给了个CheckStyle,还给公司一片红润

项目总监在管理项目时,会担心技术人员开发代码不规范的问题。如果人员少口头述说一下就好了。但是人员大呢?比如50人的大团队,如果一个一个去说那肯定不可能。所以就需要借助工具checkstyle了。checkstyle的介绍如下: “CheckStyle是SourceF…

腾讯联手警方重拳出击 《绝地求生》外挂首案告破

12月13日,闲游盒腾讯公司联手无锡江阴警方破获一起利用《绝地求生》游戏外挂非法谋利的重大案件,3名核心涉案犯罪嫌疑人全部落网,并对犯罪事实供认不讳。这是腾讯宣布获得《绝地求生》国服独家代理权以来,破获的首起《绝地求生》外…

整数转罗马数字-----题解报告

题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 直接按照题目模拟过程即可 public String intToRoman(int num) {int []a{1000,900,500,400,100,90,50,40,10,9,5,4,1};String []b{"M","CM","D",&quo…

全志R528代码编译和烧录以及测试

代表编译 代码存在如下目录中:/home/workspace/tina-r528-v1.2 这里输入如下指令进行编译: su root source build/envsetup.sh lunch r528_evb2-tina make & packroottina-virtual-machine:/home/workspace/tina-r528-v1.2# source build/envsetup.sh Setup env done! …

最小生成树专题2 最小生成树-Kruskal算法

题目: 样例1: 输入 4 5 0 1 3 0 2 2 0 3 3 2 3 1 1 2 1 输出 4 样例2: 输入 3 1 0 1 1 输出 -1 思路: 由题意,我们看一下数据,可以知道,朴素版的 最小生成树,是使用 二维数组存储…

【python入门篇】条件表达式、循环(5)

这一章节讲python的条件表达式和循环放在一起来说,条件语句是通过判断条件是否成立,根据条件表达式的结果做出决策,控制不同代码块的执行。循环是一种重复执行某段代码的结构,通常被用于遍历或处理一组数据,或者重复执行一些代码直到满足某个…

设计模式:状态模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《备忘录模式》 下一篇《访问者模式》 简介: 状态模式,它是一种对象行为型模式,它允许一个对象在其内部状态改变时改变它的行为。这种模式可以让一个对象的行为随着状态的改…

Docker安装及镜像源修改

Docker安装及镜像源修改 一、docker安装1、yum 包更新到最新2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的3、 设置yum源4、 安装docker,出现输入的界面都按 y5、 查看docker版本,…

2023年中国商用洗碗机产量、需求量、市场规模及行业前景分析[图]

商用洗碗机是餐厅、食堂、中央厨房、酒店等应用场景中不可或缺的洁净消毒设备。商用洗碗机一般用于商用目的,随着消费者对食品卫生日渐重视,中国商用洗碗机市场得到了快速发展。商用洗碗机分类洗碗机有多种形式按洗涤方式分,有喷淋式、叶轮式…

AI 数字人短视频变现及引流,轻松掌握流量密码

项目介绍 AI 数字人短视频就是利用 AI 数字人工具 ,生成模仿真人的口播视频 ,进行涨粉变现。常见的领域有情感 、 创业 、 育儿 、 书单等 ,同一个视频可以发布到各大平台 ,实现一 鱼多吃。 创业就卖思维类书籍 ,育儿…

Android setText()错误

android.content.res.Resources$NotFoundException: String resource ID #0x0at android.content.res.Resources.getText(Resources.java:415)at android.widget.TextView.setText(TextView.java:6375) 出现场景:在RecycleView的 Override public void onBindViewHo…

MySQL数据库#6

Python操作mysql 在使用Python连接mysql之前我们需要先下载一个第三方的模块 pymysql的模块,导入后再进行操作。 操作步骤:1. 先连接mysql host,port,charset,username password 库,等等。 import pymysql…

RawNet 1-3 介绍

1. Overview RawNet: Advanced end-to-end deep neural network using raw waveforms for text-independent speaker verification (RawNet 1) 出自会议:INTERSPEECH 2019. (论文链接:https://arxiv.org/pdf/1904.0…

超分辨率——SESR网络训练并推理测试(详细图文教程)

最近学了一个超轻量化的超分辨率网络SESR,效果还不错。 目录 一、 源码包二、 数据集的准备2.1 官网下载2.2 网盘下载 三、 训练环境配置四、训练4.1 修改配置参数4.2 导入数据集4.3 2倍超分网络训练4.3.1 训练SESR-M5网络4.3.2 训练SESR-M5网络4.3.3 训练SESR-M11…

使用pycharm远程调试

使用pycharm 专业版, 在设置解释器中,具备ssh 解释器功能; 一般在本地无法调试远程端代码,机械性的scp传输文件十分影响工作效率,PyCharm的Pro支持远程Run,Debug,等可视化的功能。 操作系统&…