本文简单说一下一个几乎没有人考虑过的问题,那就是为什么Open×××被设计成单线程单进程的。我曾经苦苦等待Open×××新版本的推出,第一件事就是看其ChangeLog,然而没有发现multiXXX,我一直都不理解多核时代为何还有单进程单线程的Open×××,这个答案在我通读了Open×××的maillist之后终于有了答案。
多线程在多核系统中的最大好处就是可以最大限度的利用多个处理器核心,然而一个好的算法在多核环境中最最关注的就是如何将欲求解的问题分割成可以并行处理的多个问题,然后将其分派给不同的处理器核心去处理。在典型的C/S模型中,一般根据客户来分派线程或者进程。比如Apache就是这么做的,其实IIS也差不到哪去,而且经典的UNIX网络编程规范也建议如此做,因此人们很容易将Apache的做法看做是理所当然的,虽然有了event机制来替代单纯的per-客户-per-thread,然而其底层实现都差不到哪去,只是用户态的api改变最大。
现在看看Open×××为何仅仅使用了单个处理器核心?原因很简单,那就是在IP层无法很好分割问题,如果按照用户来分割,那么很有可能一个用户连上之后并不传输数据,从而造成线程闲置,若若按照实际访问的目标来分割,那么将会造成一个笛卡尔积的复杂局面。因此最佳的方式就是让×××的搭建着自己来完成问题的分割,然后通过注入
负载均衡以及虚拟网卡bonding之类的技术来提高效率。然而可悲的是,事实上这样做的人很少,大多数人都十分满足于Open×××单线程的现有表现,我在网上google相关的Open×××提速方案,令人几乎掉泪的是搜索到的文章几乎都是我自己写的…咱也是普通一朵程序员,也有任务在身,也不是什么研究所的专职资料整理者,因此也希望能互动一把,总不能光奉献不索取吧。
网站题目:Open×××单线程原因
网站网址:
http://kswsj.cn/article/gijdho.html