并发模型和分布式系统很相似
并发模型其实和分布式系统模型非常相似,在并发模型中是线程
彼此进行通信,而在分布式系统模型中是 进程
彼此进行通信。然而本质上,进程和线程也非常相似。这也就是为什么并发模型和分布式模型非常相似的原因。
分布式系统通常要比并发系统面临更多的挑战和问题比如进程通信、网络可能出现异常,或者远程机器挂掉等等。但是一个并发模型同样面临着比如 CPU 故障、网卡出现问题、硬盘出现问题等。
因为并发模型和分布式模型很相似,因此他们可以相互借鉴,例如用于线程分配的模型就类似于分布式系统环境中的负载均衡模型。
其实说白了,分布式模型的思想就是借鉴并发模型的基础上推演发展来的。
认识两个状态
并发模型的一个重要的方面是,线程是否应该共享状态
,是具有共享状态
还是独立状态
。共享状态也就意味着在不同线程之间共享某些状态
状态其实就是数据
,比如一个或者多个对象。当线程要共享数据时,就会造成 竞态条件
或者 死锁
等问题。当然,这些问题只是可能会出现,具体实现方式取决于你是否安全的使用和访问共享对象。
独立的状态表明状态不会在多个线程之间共享,如果线程之间需要通信的话,他们可以访问不可变的对象来实现,这是一种最有效的避免并发问题的一种方式,如下图所示
使用独立状态让我们的设计更加简单,因为只有一个线程能够访问对象,即使交换对象,也是不可变的对象。
并发模型
并行 Worker
第一个并发模型是并行 worker 模型,客户端会把任务交给 代理人(Delegator)
,然后由代理人把工作分配给不同的 工人(worker)
。如下图所示
并行 worker 的核心思想是,它主要有两个进程即代理人和工人,Delegator 负责接收来自客户端的任务并把任务下发,交给具体的 Worker 进行处理,Worker 处理完成后把结果返回给 Del