-->

左耳听风_079_78_程序员练级攻略异步IO模型和Lock-Free编程

你好,我是陈浩网名猪耳朵耗子。

今天这节课呢我们来说一说异步IO模型和log free编程。

异步IO模型啊,是我个人觉得所有程序员都必须要学习的一门技术,或者说编程方法。

这其中的设计模式或者解决方法可以借鉴到分布式架构上来。

再说一遍,学习这些模型啊是非常非常重要的。

你千万要认真学习史蒂文斯在unix网络编程这本书的六点二章节,还有models中介绍了五种IO模型,分别是阻塞IO、非阻塞IOIO的多路复用信号驱动的IO和异步IO.然后呢在前面我们也阅读过了c十k problem,相信你对IO模型啊也有了一定的了解。

那这里呢我们需要更为深入的学习IO模型,尤其是其中的异步IO模型。

首先呢我们来看文中这一篇和java相关的,还有模型的文章,来复习一下之前的内容。

这个PPT中啊不仅回顾并比较了各种IO模型,而且还有各种比较细节的方案和说明,是一篇非常不错的文章。

然后呢,你可以看一篇java相关的PPT,道格莱亚的scalable, able IO in java.那这样呢你会对一些概念有个了解。

那接下来呢我们需要了解一下各种异务IO的实现和设计方式。

首先是IBM those application performance using a synchronoous IO,这是一篇关于AIO的文章。

其次,lazy in synchron's IO for event driven servers,这篇文章也很不错。

另外呢e步IO模型中的windows IO completion pots你也需要了解一下。

那如果MSDN上的这个手册不容易读,你可以看一看文章inside IO competition orts.另外呢关于windows windows internals这本书啊,你可以仔细读一下啊,是非常不错的那其中有一集IO processing也是很不错的。

这里呢我在文中啊给一个网上免费的链接,IO processing,你可以看一看windows是怎么玩的。

接下来是live event,你可以看一下它的主要维护人员。

尼克马修森写的live event二点零book,还有一本国人写的电子书,leave event深入浅出。

再接下来呢是live UV,你可以看一下它官网的live UV design overview了解一下。

我简单总结一下。

那基本上来说呢,异步IO模型的发展技术是从select到pool到epro,到AIO到live event,再到live UV、 unix和linux做了好几十年走过的这些技术的变迁。

但是呢都不如windows IO completion port设计的。

好,那这个观点纯属个人观点,相信你仔细研究这些IO模型之后呢,你会有自己的判断。

看过了这些各种e五IO模式的实现以后呢,相信你会看到一个编程模式啊,就是reactor模式。

文中呢有这三篇这个模式的相关文章。

然后呢,是几篇有意思的延伸阅读文章,课后呢你都可以打开看一看。

接着呢我们再来说lock free编程相关的内容。

Log free呢也就是无锁技术,越来越被开发人员所重视。

因为锁对于性能的影响实在是太大了。

所以说如果你想开发一个高性能的程序啊,你就非常有必要学习lock free的编程方式。

那关于无锁的数据结构呢,文中有几篇教程,你可以看一下,然后呢强烈推荐一本免费的电子书,叫做espiro programming heart. And if so, what can you do about it?这是大牛保罗麦肯尼写的书,这本书堪称并行编程的经典书啊,你一定要看一看。

另外呢维基百科上有三个词条,你也需要看一下,以此来了解并发编程中的一些概念。

这三个词条啊,分别是non blocking algorithm、 read copy update和pycllock.接下来啊再读两篇论文,第一篇是implementing loffrey kills,这也是一篇很不错的论文。

我把它介绍在了我的网站上,文章叫做无所队列的实现。

第二篇叫做simple fast and practical nonblocking and blocking concurrent cuoorisms.这篇论文给出了一个无阻塞和阻塞的并发队列算法。

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

那第一个呢是德米特里法。

尤科夫的和law free编程相关的网站一零二四courres.第二个是保罗麦肯宁的个人网站。

第三个是关于并发算法和相关模式的网站。

Concurrency freaks,第四个是pression on programming.他是加拿大程序员杰夫普莱辛的技术博客,主要关注c加加和python两门编程语言。

他用c加加十一实现了类的反射机制,用c加加编写了三d小游戏,hop out还给他编写了一个游戏引擎。

他还讨论了很多c加加的用法啊,比如说c加加十四推荐的代码写法,新增的某些语言构造等等,和python很相似。

阅读这个技术博客上的内容啊,能够深深感受到博主对于边上世界的崇敬和痴迷。

第五个博客叫做萨特斯mill.赫伯萨特呢是一位杰出的CI加专家,他曾担任ISOC加加标准委员会秘书和召集人超过十年。

他的博客有关于c加加语言标准最新进展的信息。

那其中呢也有他的演讲视频,博客中还讨论了其他技术和CI加的差异啊,比如说c sharp和javascript它们的性能特点,以及怎么避免引入性能方面的缺陷啊等等。

最后,第六个博客叫做mechanical sympathy博主,是马丁汤姆森,他是一名英国的技术极客,探索现代硬件的功能,并提供开发、培训性能调优和咨询服务。

他的博客主题是harward and software working together in harmony.因为探讨了如何设计和编写软件,使得它在硬件上能够高性能的运行啊,非常值得一看。

接下来是一些编程相关的c一和CI加的内库。

那这样呢,你就不用从头再到轮子。

第一个是boost库中的无锁数据结构,boost lock free.第二个是并发性编程的原语concoversy kit.那第三个呢是facebook的开源库folly,第四个是junction一个c加加中的并发数据结构。

第五个是用c加加十一编写的有边界的多生产者多消费者的无锁队列MPMCQ.第六个呢是一个有边界的单生产者,单消费者的无等贷无锁的队列SPSCQ.第七个呢是用c加加实现的cc lock.第八个呢是一个用户空间的RCU库live URCU.第九呢是一个并发数据结构的c加加库部lic DS.最后呢第十个是一个用c语言编写的可移植,无许可证无锁的数据结构库列为LFDS.那除了前面说的这些知识啊,还有一些其他的内容你也需要了解。

第一呢就是关于六十四位系统编程,只需要去一个地方就行了啊,就是all about sixty four bit programming in one place.那这是一个关于六十四位编程相关的收集页面。

那其中呢包括相关的文章,二十八节课程,还有知识库和相关的blog.第二是what scalleable programs need from transactional memory.事务性内存一直是许多研究的重点,它在IBM、 blue、 jen q和intel harswell等处理器中得到了知识,许多研究都是用stem基准测试套件来评估它的设计。

但是呢我们知道的所有TM系统上的stamp基软测试所获得的加速都比较有限。

例如,在IBM、 blue gen q上有六十四个线程,我们观察到使用blue、 jen q硬件事务内存的中值加速比为一点四倍,而使用软件事务内存的中值加速比为四点一倍。

那什么限制了这些TM基准的性能呢?在这篇论文中啊,作者认为问题在用于编写他们的编程模型和数据结构上。

那只要使用合适的模型和数据结构程序的性能可以有十多倍的提升。

第三篇是improving open SSL performance.这篇文章除了教你如何提高open SSL的执行性能,还讲了一些底层的性能调优知识。

另外呢就是关于压缩的内容。

那为了避免枯燥啊,我这里主要推荐两篇实践性很强的文章。

第一篇文章how evase shopping card use compression techniques to sove network. I ll bottom ect啊,这是一篇很好的文章,讲述了ebay是如何通过压缩数据来提高整体服务性能的那其中有几个比较好的压缩算法。

那除了可以让你学到相关的技术知识,它还可以让你看到一种比较严谨的工程师文化。

那另一篇文章呢叫做linkedin boosting size speed using broughly compression linkein在二零一七年早些时候啊开始使用brottly来替换j zip,以此带来更快的访问。

那这篇文章讲述了什么是brottly,以及和其他压缩程序的比较,还有所带来的性能提升。

那这里呢还有两篇关于SSD硬盘性能测试的文章performance testing with SSD part one,还有performance testing with SSS part two.这两篇文章介绍了测试SSD硬盘性能和相关的操作系统调优方法。

那最后呢是一本电子书,叫做secure programming. How to creating secure software?那其中呢有繁体中文的翻译,这本电子书讲了linux和unix下的一些安全编程方面的知识。

在这节课的最后呢,我还想推荐几篇不错的论文。

第一篇论文呢叫做hints ful computer system design,意思是计算机设计的终稿。

那这个是ACM图鉴奖得主butter lampson在施勒帕ar工作时的一篇论文。

这篇论文简明扼要的总结了他在做系统设计时的一篇想法啊,非常值得一读。

第二篇论文,the five minutes room for trading memory for disk accesses and five bites room for trading memory for CPU time.根据文章名称也可以知道,五分钟法则是用来衡量内存与磁盘的。

而五字节法则呢是在内存和CPU之间的权衡。

这两个法则是jim gray和franco pizou在一九八六年的文章在这篇论文发表。

十年后的一九九七年啊,je brick gotography又写了the five minute routen years later and other computer stories rules of them.这篇文章对这个法则进行了重新审视。

在二零零七年啊,也就是这篇论文发表。

二十年后,这年的一月二十八日,jingrary驾驶一艘四十英尺长的船从旧金山港出海,目的是航行到附近的菲拉隆岛,在那里撒下母亲的骨灰。

那出海之后呢,他就同朋友和亲属失去了联系。

那为了纪念和向大师致敬,时隔十多年后的二零零九年,god's graphy又发表了the five minutes room twenty years later and how flash memory changes the rules. Gim gray是关系型数据库领域的大师,因为他在数据库和事务处理研究和实现方面的开创性贡献而获得了一九九八年的图灵奖。

他是美国科学院工程院两院院士。

Acm和i triple e两会会士,他在二十五岁的时候成为加州大学伯克利分校计算机科学学院第一位博士。

在IBM工作期间呢,参与和主持了IMS system r circle、 DS和DB two等项目的开发。

后来呢在微软研究院任职,主要关注应用数据库技术来处理各学科的海量信息。

好了,我总结一下今天的内容。

异步IO模型呢是我个人觉得所有程序员都必须要学习的一门技术啊,或者说是编程方法。

这其中的设计模式或者解决方法可以借鉴到分布式架构上来。

而且我认为学习这些模型非常的重要啊,你千万要认真的学习。

那接下来呢是lock free方面的内容,由于锁对性能的影响实在是太大了,所以它越来越被开发人员所重视。

那如果想开发一个高性能的程序啊,你非常有必要学习look free的编程方式。

随后呢我给出系统底层方面的其他一些重要的知识,比如六十四位编程,提高open SSL的执行性能,压缩SSD硬盘性能测试等等。

最后呢我介绍了几篇,我认为对学习和巩固这些知识非常有帮助的论文啊都很经典,推荐你务必看一看。