异步I/O模型

异步I/O模型是我个人觉得所有程序员都必需要学习的一门技术或是编程方法,这其中的设计模式或是解决方法可以借鉴到分布式架构上来。再说一遍,学习这些模型,是非常非常重要的,你千万要认真学习。

史蒂文斯(Stevens)在《UNIX网络编程》一书6.2 I/O Models中介绍了五种I/O模型。

然后,在前面我们也阅读过了 - C10K Problem 。相信你对I/O模型也有了一定的了解。 这里,我们需要更为深入地学习I/O模型,尤其是其中的异步I/O模型。

首先,我们看一篇和Java相关的I/O模型的文章来复习一下之前的内容。Thousands of Threads and Blocking I/O: The Old Way to Write Java Servers Is New Again (and Way Better) ,这个PPT中不仅回顾和比较了各种I/O模型,而且还有各种比较细节的方案和说明,是一篇非常不错的文章。

然后,你可以看一篇Java相关的PPT - 道格·莱亚(Doug Lea)的 Scalable IO in Java,这样你会对一些概念有个了解。

接下来,我们需要了解一下各种异步I/O的实现和设计方式。

我简单总结一下,基本上来说,异步I/O模型的发展技术是: select -> poll -> epoll -> aio -> libevent -> libuv。Unix/Linux用了好几十年走过这些技术的变迁,然而,都不如Windows I/O Completion Port 设计得好(免责声明:这个观点纯属个人观点。相信你仔细研究这些I/O模型后,你会有自己的判断)。

看过这些各种异步I/O模式的实现以后,相信你会看到一个编程模式——Reactor模式。下面是这个模式的相关文章(读这三篇就够了)。

然后是几篇有意思的延伸阅读文章。

Lock-Free编程相关

Lock-Free - 无锁技术越来越被开发人员重视,因为锁对于性能的影响实在是太大了,所以如果想开发出一个高性能的程序,你就非常有必要学习 Lock-Free的编程方式。

关于无锁的数据结构,有几篇教程你可以看一下。

然后强烈推荐一本免费的电子书:Is Parallel Programming Hard, And, If So, What Can You Do About It? ,这是大牛 保罗·麦肯尼(Paul E. McKenney) 写的书。这本书堪称并行编程的经典书,必看。

此时,Wikipedia上有三个词条你要看一下,以此了解并发编程中的一些概念:Non-blocking algorithmRead-copy-updateSeqlock

接下来,读一下以下两篇论文 。

最后,有几个博客你要订阅一下。

接下来,是一些编程相关的一些C/C++的类库,这样你就不用从头再造轮子了(对于Java的,请参看JDK里的Concurrent开头的一系列的类)。

其它

相关论文

小结

好了,总结一下今天的内容。异步I/O模型是我个人觉得所有程序员都必需要学习的一门技术或是编程方法,这其中的设计模式或是解决方法可以借鉴到分布式架构上来。而且我认为,学习这些模型非常重要,你千万要认真学习。

接下来是Lock-Free方面的内容,由于锁对于性能的影响实在是太大了,所以它越来越被开发人员所重视。如果想开发出一个高性能的程序,你非常有必要学习 Lock-Free的编程方式。随后,我给出系统底层方面的其它一些重要知识,如64位编程、提高OpenSSL的执行性能、压缩、SSD硬盘性能测试等。最后介绍了几篇我认为对学习和巩固这些知识非常有帮助的论文,都很经典,推荐你务必看看。

下面是《程序员练级攻略》系列文章的目录。