并发
并发和并行的区别
-
并发:并发指的是,事件同时发生。就是接下来需要完成的事件,是一种情况。
比如一条只能同时经过一辆车的村道,如果同时有多辆车要通过,这就是一个并发的问题。现实中我们通常会使用排队的方式,让车辆一个一个通过。算法源于生活,队列是一种很常见的处理并发的方法。
-
并行:并行是指同时完成多个事件,是并发的一种处理手段。
在上面那个例子中,并行就是建条多车道,同时让多辆车通过。
并发
饭堂打饭模型
中午12点,开饭了,都涌向食堂,这就是一种并发。如果人很多,就是高并发。
1、队列
假设只有一个窗口,陆续涌入的人,排队打饭就是一种很好用的方法。依次打饭,每个人都能打到。使用队列的话,就必须用到缓冲区,总得有块地来搁这些人。
如果领导或者教师优先的话,那就会形成两个队列。只要领导队列有人,普通员工就必须排队,领导队列就是一个优先队列。
2、争抢
争取虽然听起来很暴力,但也不乏是一种处理方式。只要谁能挤进来就给谁打饭。作为饭堂工作人员是最简易的方式。但是有可能会有人始终都抢不到。
### 3、预处理
在开饭前先把饭菜做好打好,有人来只需要递就行了。
预处理是基于经验的,需要提前知道需要哪些菜,需要做多少菜多少饭。这是一种空间换时间的方法,需要一个地方来放置打好的饭菜。
对于计算机来说,提前将时效性不强的数据处理并常驻内存能够很好的提高速度。
4、并行
如果一个窗口不够的话,那多开几个窗口,多雇几个员工不就行了。
通过并行能够很好地从根本来解决问题,但是同时也会带来很高的成本。
计算机上可以通过购置更多服务器,多进程来解决并发问题。并行是一种水平扩展的思想。
而且还会出现资源浪费,饭堂往往到饭点食客才会多。高并发往往都是短时间的。
注意:如果是在单一cpu上进行多进程和多线程就不是并行,而是一个cpu对多个线程进行轮询处理。
5、提速
提高单一窗口的速度,也可以解决并发问题,是一种垂直扩展的思想。
但是单一的提升是有上限的,并且越接近上限就越难提升。而且如果单一的服务器挂了,那么所有的服务都挂了,而水平扩展的话,只是整体的性能降低了。
以上是处理并发比较常用的手段,当然还有其他的手段,比如消息中间件。高并发问题通常需要根据场景选择多种手段相结合来解决。
5719

被折叠的 条评论
为什么被折叠?



