linux是一个工程而不是理论

今天无聊的时候看了一会linux的FAQ,里面着重提出,linux不是一个很好的计算机科学理论而是一个很好的工程,很多人在邮件列表中提出一个新的想法,真的是很有创意的想法,但是很无情的被那些大牛们给咔嚓了,然后Linus或者Alan Cox等人就会给人一种很不随和的形象,其实他们都很忙,都有自己的工作,对于他们来说,写代码并且给出测试数据比空洞地谈理论要好得多,他们是典型的实践派,如果你提出了一个新的观点,那么最好的方式就是用代码实现它,并且将补丁和测试数据提交到社区,很多的计算机科学家们的理论在linux开发者那里都被不屑一顾的否定,linux的开发者们最烦的就是纸上谈兵了,举个例子就是多线程,理论证明越多的线程效率越高,但是那是在各方面都到位的基础上的,现实情况是,没有那么理想的情况,于是linux就不提倡创建很多线程,按照经验值,一个cpu平均1.5个线程就足够了,其实linux的调度器决定了linux中最好的情况就是线程的数量和cpu的数量一样多,因为linux是按照每cpu一个运行队列调度的,这就是linux的方式。比如很多的理论都是强调某某算法多么的高效,可是linux很简单的用实践否定了它。

事情又让我想起了syslet,很早以前我就写过一篇syslet补丁的文章,今天我突然想起来它,不得不为其设计而惊叹,syslet用另外一个线程替换被阻塞的当前的线程而返回,返回用户空间的这个syslet被do_fork的时候被赋予了CLONE_THREAD参数,那么也就是说就是原来将要阻塞的进程的一个线程,这样代替阻塞进程返回用户空间后也不会改变pid,改变的就是线程的id,就是这样的,所以说,一点也不改变原始执行绪的语义,如果用户非要在意线程id的话,那么我相信用户会自己处理好这个事情的,linux其实可以用任何方式在任何方向进行突破。

你可能感兴趣的:(linux)