Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2039136
  • 博文数量: 369
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 4271
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-21 00:59
文章分类

全部博文(369)

文章存档

2013年(1)

2011年(2)

2010年(10)

2009年(16)

2008年(33)

2007年(146)

2006年(160)

2005年(1)

分类: LINUX

2007-03-11 23:59:13

这个题是盗用上的"",这篇文章又引发了一场争论,结论当然还是各有所长,又是一个“无用”的争论...

个人认为事件驱动的编程模型比线程/进程模型更加“底层”,这当然又是一把双刃剑(怎么到处都是哲学?),给你提供了无限机会的同时,也让你承担了更多的风险。相比之下,线程/进程的编程模型是“牺牲”了些优化空间,却带来了更多的安全性和便利性。他们之间的取舍还是要具体问题具体分析的,似乎又是一通废话...

争论的引子是来异步io的实现方式:
  1. 事件回调和回调不可用时的重试方式[]:这是目前内核中的异步IO实现。不过他只实现了文件的O_DIRECT方式读写,对于文件的缓冲读写和其他比如socket的异步读写还没能实现。倒是存在了很长时间,就是一直未能进入官方的内核,猜测可能因为有与之有异曲同工之妙的select/poll/epoll机制的存在,致使对此功能的需求一直不是很强劲。那为什么文件部分进入了官方内核?因为select类调用不支持文件,或者说那种接口不适合文件,所以才有了异步IO作为补充。
  2. 基于线程/进程的实现方式[]:这段时间被广泛讨论的就是这个了,其实目前内核异步io的实现者也早就讨论过这种方式[],并且glibc也有用户空间实现的异步IO:。这个idea唯一新的地方可能就是:只有当调用不能同步完成的时候才启动一个内核线程。至于它所提到的能够比较容易的实现所有IO的异步,我想大家对于此点都是心知肚明的,没啥新鲜感。
被纠缠进来的还有力图统一事件驱动接口的,其实人家想要解决的主要问题本来与这个无关的,被扯进来也是沾了event的光,好象有些无辜,hoho!

最后,还是Linus打“圆场”[],其言辞颇有邓的“猫论”的风范。也是,如果两者都有好处,作为提供“机制”的内核来说为什么不都支持,让我们自己根据需要去选择呢?

如果从实现异步IO来讲,个人不赞成threadlets的方式,确实没有必要搞那么多线程,用任务队列就够了,既能发挥smp/multi-core系统的计算能力,又可以节约空间,至于编码的复杂度...,不要忘了做内核是什么最重要!况且异步IO本身不就是事件驱动的编程模型吗?有什么理由非要用线程来实现?

一家之言,结果如何,只能拭目以待!

参考资料:

[1]
[2]
[3] 
[4]
阅读(1643) | 评论(0) | 转发(0) |
0

上一篇:蹭饭记

下一篇:十年树木,百年树人

给主人留下些什么吧!~~