WinNT和Linux的比较

来源:百度文库 编辑:神马文学网 时间:2024/04/27 21:41:11
关于WinNT和Linux的比较,这个话题说起来就没个完,随便讲讲吧。
第一、微内核。很多人并没有理解,微内核实际上是一种以性能下降为代价,而提高软件架构合理性的设计方案。更加完美的微内核架构Mach,在他诞生之后多年,其性能都饱受诟病,直到更强大的PowerPC G5处理器出现之后,才在新一代的Mac OS 10上得以商用。那么,如果说采用了微内核架构WinNT,其性能达到甚至超过没有采用微内核架构的Linux,那么谁的代码更优化不就一目了然了吗?
在有可能安装大量第三方驱动程序的条件下,微内核架构崩溃的概率要远小于非微内核架构,这只是微内核的优点之一。
第二、GDI。WinNT的GDI处理更多的是放在内核中的,XWindow则不然,因此XWindow从理论上讲就不可能比WinNT的窗口系统效率高。这样的设计如果用于服务器的OS显然不可取,但在本贴的范围内,讨论的都是个人电脑的OS,显然WinNT要比Linux更适合图形界面的桌面应用(Linux或许更适合于服务器,因为它简单,简单意味着高效)
第三、线程管理。Linux内核直到2.4版,线程的实现仍是相当低效率的,连Linux开发者自己也不满意,所以才有了2.6内核的NPTL,可是2.6内核投入商用才几年?从这一点来讲,恰恰就是“落后了一代”。
同样,直到2.4内核,Linux的内核任务(核内线程)仍然是不可抢占的。实际上在2.4内核上运行多优先级的高并发的多线程程序仍然是一个笑话。
我个人认为WinNT的线程同步接口比pthread要更加合理和丰富,使程序开发更加方便。WaitForMultipleObjects是WinNT线程同步上的一大特色,著名的ACE专门为其WinNT实现版本包装了这个方法。
第四、I/O。WinNT多年以前就实现了与POSIX 1003.1c中 aio_xxxx 语义相类似的OVERLAPPED异步I/O机制,这种模式可以显著提高I/O的吞吐率,Linux呢?
实际上在线程管理和I/O模式这些对系统性能至关重要的方面,无论WinNT、IBM AIX、SUN Solaris,其先进性都超过Linux一代。和这些成熟的商用系统比起来,Linux更像是个血气方刚的小伙子,年轻不成熟,但得到全球开源界的支持,因而强壮并且后劲十足。
第五、网络处理。对于大规模并发的网络操作(想一想BT下载),select和poll实现了第一代Reactor模型,而WinNT的完成端口模型和Linux 2.6内核的EPOLL则可以称之为第二代Reactor,其共同特点是使用不止一条API调用,引入了一个真正的内核对象来存储Reactor的状态信息,从而避免了第一代Reactor巨大的查询开销。而完成端口模型的诞生时间,比EPOLL要早5年以上(虽然EPOLL后来居上,比完成端口更合理一些)。
文件系统我不熟悉,就不说了。但以上的对比足够说明WinNT在内核的技术体系上比Linux先进一代了吧。
实际上,在OS的核心技术上,Linux一直扮演的都是一个跟随者的角色,难道一帮程序爱好者的松散结盟,真的能比软件巨头们真金白银的投入更管用么?当然,现在Linux得到了很多软件巨头的支持,所以将来他或许会有后来居上的机会。2.6内核的许多新特性已经体现出了这种可能。