SEDA有两个思想。一是分阶段,二是事件驱动。原理则是分而治之。在分工合作的基础上加上反馈机制形成一个动态调整的执行环境。
HALF-SYNC/HALF-ASYNC是局限于IO范围以内进行性能调整的方法。即在承认IO操作之间的差异性基础上,有针对性地解决问题。说它是一种非常有局限性的方法,是因为这种方法并不能解决IO子系统与整个系统之间的个体与集体之间的冲突问题。是典型的头痛医头,脚痛医脚。
PIPELINE AND RESOURCE MANAGEMENT 的思想是在承认SEDA的分工合作的思想基础上进一步加入了资源管理。当然,流水线的思想首先是一种异步思想,即大家各干各的工作,互不相干。
分工或者分阶段的粒度大小只能在长期的实践中去动态调整。这个有点象商业上的业务流程重组。在不同的历史条件与环境下面,资源经常会表现出不一样的特性。比方说,在64位的平台下,内存资源明显变得没有在32位环境下紧张;而1块千兆网卡肯定快过百兆网卡。
有人提到SEDA其实已经有智能的成分在里面。可惜这个项目已经停止了好多年。停止的原因尚不知道,这里暂不作猜测。
关于线程模型的争论,我认为关键在于线程的调度策略,或者说线程的自由度。我们知道,在大多数国家里,人们是自由的。但这种自由是有限的,即有个度在里面,它就是自由度。线程作为一个自主运行的任务载体,就象人一样,有摧毁整个系统秩序的能力。经过几千年的进步,我们学会了用战争与法律来实现整个社会的有序,但是对计算机系统来讲,我们却仍然处在原始社会。即线程们各自为政。
所以说,线程模型本身是没有问题的。问题的根本在于系统对线程的调度策略上面。从现实世界中取经的话,战争与法律永远是最好并且最有效的武器。
一个有效的系统,除了对内充分发挥自己的本领,还需要对外提供良好的响应性能。对内的问题是在一个有限范围内的问题。而对外的问题包含着很大程度的未知因素。对一个开放系统来讲,你很难知道什么时候会有多少请求以及会有些什么请求。
如上所说,法律只能解决内部问题,战争虽然有时可以用来解决外部问题,但是总体来讲,在大多数时候,外交手段在外部问题上来得比战争有用得多。其实很多人都曾经提到过,高性能的网络应用,不能只盯着服务器内部,分布式计算才是真正的解决办法。但是分布式计算往往只是在机群环境中才能得以实施。而如果使用了机群,这样的手段还算得上是外交手段吗?我看顶多只能算是一种经济手段吧(以逆差的形式进行生产资本的输入?)。真正的外交手段是向有求于你的人谈条件。这就象此次美国以灾援为诱饵向缅甸要求驻军一样。
当你的服务器被成千上万的请求给淹没的时候,以一挡百,是英雄主义的思想。相反,向向你提交请求的人请求帮助,是合理的行动。俗话说,解铃还须系铃人。向请求你帮助的人请求帮助,其实就是一种自助。