先讲一个场景:“团队负责人接到一个新项目,他会把项目进行需求细化,功能细化,然后他会分配给不同的团队成员完成”。 在这个场景中,团队负责人就是master,团队成员就是worker,至于这样做的好处,不用说大家也明白,如果团队负责人一个人干,估么着他要么累死,要么任务完不成被领导骂死。同理,架构层面master-worker模型的最大作用就是提高处理效率,特别是在多核cpu上,多worker的并发执行更有效的利用了cpu资源,提高了处理效率。在我们的实际应用中master-worker模型往往会结合生产者-消费者模型使用,由master产生一个队列,而每个worker作为消费者消费这个队列。
回到上面的场景中,是个典型的瀑布团队的做法,由团队负责人把各个任务强行摊派给每个团队成员,他假设给每个人分配了合适的任务,也假设每个人能在指定时间内完成任务,这种方式的典型应用就是memcached网络模型的使用。如下图:
再回到上面的场景中,每个团队成员怎样得到任务呢?我对于memcached网络模型,当我们往每个worker队列中push任务时就采用某种通知机制告知worker有任务了,快领命干活。比如memcahed的网络模型采用每个worker线程和master线程之间建立一个pipe来进行通知。 比如团队负责人简单地按照RR(轮询)的方式分配任务,作为一个新手你肯定会抱怨,因为没有考虑到你的实际处理能力。对于nginx的方式,当有新任务时,首先看看大家谁能做,比如nginx就是采用worker争锁的方式来竞争任务,master只是负责管理每个worker。
以上就是master-worker模型的简单介绍,至于他的适用场景有很多很多,大家可以自己扩展。另外从上面的场景模拟中我也想向大家推荐敏捷团队的管理组织方式。
参考书籍:
《深入理解计算机系统》 13章-并发编程
《UNIX环境高级编程》 11章-11.3线程标识