什么是计算机中的并发
计算机中的“并发”是一个听起来很复杂的词汇,但我们可以把它简单理解为“同时做很多事情”。想象一下你正在做晚饭:你可以在等水烧开的时候切菜,还可以在等待炖汤时洗碗。尽管你只有一双手,但通过合理安排时间,你可以看起来像是在同时完成多项任务。这就是“并发”的基本概念。
并发与并行的区别
在解释并发之前,我们需要了解另一个相关的词汇:“并行”。并发和并行有时会被混淆,但它们是不同的概念。
- 并行:是指两个或多个任务在同一时刻真正地同时执行。想象一下,你有两个灶台可以同时用,一个在煮饭,另一个在煎鸡蛋。这两个操作是真正同时发生的,互不干扰。
- 并发:并发并不一定要求任务在同一时刻执行。它更像是多个任务交替进行,比如你在一个灶台上先煮饭,然后趁着煮饭的时间去切菜,再回来搅拌锅里的饭。这些任务虽然不是严格意义上的同时进行,但它们是交替进行的,看起来像是同时进行的。
并发是两个队列交替使用一台咖啡机,而并行则是两个队列同时使用两台咖啡机。再用一个例子来解释:
- 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
- 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
- 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
从上面的例子可以看出来,并发的关键就是需要能同时处理多个任务的能力,这个不一定是同时进行的。并行则关键是要能同时处理多个任务。二者的关键区别在于是否具备同时性。 这也很好的能在计算机上进行理解,在早期只有单核CPU的计算机上,随着系统CPU的时间片调度,系统可以支持并发和串行。而在目前多处理器的多核系统中,系统除支持并发与串行之外,还支持并行。
计算机中的并发是如何实现的
计算机中的并发通常通过操作系统和硬件的协作来实现。你可以把操作系统想象成一个非常高效的厨房主管,它会帮助你安排任务的顺序,并在你忙于一项任务时偷偷安排另一项任务。
多任务处理(Time-sharing)
大多数现代计算机可以同时运行多个程序。这是通过“时间片”来实现的,也就是操作系统把时间划分成非常短的片段(可能只有几毫秒),并让每个程序轮流使用CPU。虽然这些任务实际上是交替执行的,但由于时间片非常短,给人一种任务是同时进行的错觉。这就是多任务处理。
线程与进程
在计算机中,程序通常会被分成“进程”和“线程”来处理。
- 进程:进程是程序运行时的实例,每个进程都有自己独立的内存空间。不同进程之间通常不会直接交互。
- 线程:线程是进程内部的更小的执行单元。一个进程可以包含多个线程,这些线程可以共享进程的内存空间,这使得它们能够更加轻松地互相通信和共享数据。
通过使用多线程,一个程序可以看起来像是同时做多件事,例如,一个下载程序可以在下载文件的同时更新界面,给你实时显示下载进度。
同步与互斥
当多个进程或线程需要访问同一资源时,例如一个文件或一块内存,它们可能会产生冲突。为了避免这些冲突,计算机使用了一些机制来协调这些操作,其中最常见的两个概念是“同步”和“互斥”。
- 同步:同步就像是一种协作协议,它确保多个线程在访问共享资源时能有序进行,而不会相互干扰。
- 互斥:互斥是一种机制,确保在某一时刻只有一个线程可以访问特定资源。就像一间只有一把钥匙的房间,只有拿到钥匙的人才能进入,其他人必须等到钥匙归还后才能进入。
为什么并发很重要
并发使得计算机能够更加高效地利用资源。通过并发,一个计算机可以处理多个任务,即使这些任务本身可能比较小。比如,你可以在听音乐的同时进行文字处理,并且还能在后台下载文件。这一切都是通过并发来实现的。
此外,并发对于服务器和网络应用程序非常重要。比如,在处理网络请求时,服务器需要同时处理来自多个用户的请求,使用并发技术可以让服务器在短时间内处理更多的请求,从而提高效率和用户体验。
什么是高并发
高并发(Hight Concurrnet),从字面上来理解就是让单位时间同时处理任务的能力尽可能的高。对应到我们研发系统中,也就是说: 我们所开发的系统,要在短时间能能支持大量访问请求的情况。这种情况比如双十一活动,或者12306的抢票、以及秒杀等活动。 这要求我们的业务系统,在短时间内,尽可能多的接收来自客户端的请求,并做出准确的响应。
实际上,从另外一个角度考虑,我们所说的高并发,并行已经是其一个子集。毕竟,单个CPU或者单个系统节点的处理能力有限,而且成本昂贵, 我们需要通过多个节点,采用可扩展的方式,来实现支撑尽可能高的并发能力。而水平扩展的能力,实际上从另外一个角度来说,并行是提升系统并发能力的重要手段。
那么,既然是高并发,那么多高才算高呢?为了更好的对系统的高并发性进行评价,需要对如下指标进行了解:
- 响应时间:系统对请求做出响应的时间,既然是高并发系统,这个响应时间就不可能太长,需要尽可能的短。
- 吞吐量:系统单位时间内支持的最大请求数,当然越多越好。QPS是吞吐量最常用的量化指标之一。
- 并发用户数:系统同时承载的正常使用功能的用户数量。如通信系统的同时在线人数。反应了系统的负载能力。这个指标当然越大越好。
重要参数如下:
- QPS(TPS):每秒的Request/事务的数量
- 并发数:系统同时处理的request/事务数量
- 响应时间:平均的响应时间
QPS(TPS) = 并发数/平均响应时间
此外还有些相关的指标也需要了解:
- PV(Page View): 页面访问量,即页面浏览量或点击量。
- UV(Unique Visitor): 独立访客,统计1天内访问某站点的用户数。即按人按天去重。
- DAU(Daily Active User):日活跃用户数量。通常统计一日(统计日)之内,登录或使用了某个产品的用户数,与UV概念相似。
- MAU(Month Active User):月活跃用户数量,指网站、app等去重后的月活跃用户数量。
上述指标内容,主要是反映了高并发系统在高性能上的要求。做为高并发系统,需要实现的目标为:
- 高性能:这体现了系统的并行处理能力,在有限资源的情况下,提升性能能节省成本。同时也给用户带来了更好的用户体验。
- 高可用性:系统可以正常服务的时间,尽量避免系统的事故和宕机从而影响正常的业务。
- 高扩展性:表示系统的扩展能力,系统具备更好的弹性,在流量高峰期能否短时间完成扩容,更平稳的承接流量峰值。
结语
尽管“并发”这个词在计算机领域中听起来很技术性,但它的核心思想并不难理解。通过类似于你在厨房里多任务处理的例子,我们可以看到并发实际上是让计算机看起来像是在同时做多件事的技术手段。理解了这些概念,不仅有助于更好地理解计算机的工作原理,还可以帮助你更有效地使用计算机资源。
欢迎关注公众号:“全栈开发指南针”
标签:计算机,系统,并行,杂谈,同时,并发,全栈,线程 From: https://blog.csdn.net/m0_46580983/article/details/141496208
这里是技术潮流的风向标,也是你代码旅程的导航仪!