内卷老员工之并发模型-并行工作者

237 阅读3分钟

这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

并行工作者并发模型

第一种并发模型是并行工作者并发模型,传入的工作将分配给不同的工人,下面是并行工作者模型的流程图。 image.png

  • 在并行工作者并发模型中,委托者将传入的工作任务分配给不同的工作工作者,每个工作者完成完整的任务。工作者并行的工作在不同的线程中,同时大概率工作在不同的cpu上。
  • 如果在汽车工厂中实行并行工作者并发模型,每辆汽车由一个工人生产,每个工人将从头到尾完成一辆汽车的制造。
  • 并行工作者是java中最常用的并发模型,java.util.concurrent包中许多并发实用程序都是按照这个模型设计实现的。
  • 并行工作者的并发模型可以设计为共享态或单独态,而这意味着不同线程间可以完成对某些资源的共享,同时也可能没有共享状态。

并行工作者并发模型的优势

  • 并行工作者并发模型的优势在于易于理解,想要提高并发能力,增加更多的工作者即可。
  • 例如对于一个网络爬虫的应用,可以设置不同数量获取最短时间。网络爬虫是io密集型工作,因此cpu会有大量空闲等待的时间。

并行工作者并发模型的缺点

并行工作者模型在简单的逻辑下同样存在着一些缺点。

共享状态可能变得复杂

  • 当共享对象需要访问内存或数据库中的共享数据,管理并发访问将变得十分复杂。一部分共享数据是通信机制中的如消息队列,而另一部分则是业务数据、数据缓存和连接池。
  • 当并行工作者进行共享数据,逻辑将变得十分复杂。一个线程需要更改数据的同时,确保其他线程对数据可见(推送到主内存,而不仅仅停留在cpu缓存中)。线程需要避免竞争条件、死锁等其他并发问题。
  • 此外,当线程互相等待时,部分并行化会消失,存在共享数据结构的竞争。

无状态工人

  • 共享变量可以被其他线程进行修改,因此当使用时必须从主存中读取最新的数据。由于这种无状态的特性,读取速度会变得缓慢,尤其存储在外部数据中时。

不确定执行

  • 并行工作者的领域给缺点是执行顺序不确定。可能工作a在工作b之前先分配,却在工作b执行之后才执行。由于这个特性使得并发工作的顺序难以确定。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。