极客时间-左耳听风-程序员攻略-异步I/O模型和Lock-Free编程
异步 I/O 模型
异步 I/O 模型其中的设计模式或是解决方法可以借鉴到分布式架构上来。
史蒂文斯(Stevens)在《UNIX 网络编程》一书 6.2 I/O Models 中介绍了五种 I/O 模型。
- 阻塞 I/O
- 非阻塞 I/O
- I/O 的多路复用(select 和 poll)
- 信号驱动的 I/O(SIGIO)
- 异步 I/O(POSIX 的 aio_functions)
C10K Problem ,了解 I/O 模型
Thousands of Threads and Blocking I/O: The Old Way to Write Java Servers Is New Again (and Way Better) , Java 相关的 I/O 模型的文章,这个 PPT 中不仅回顾和比较了各种 I/O 模型,而且还有各种比较细节的方案和说明。
Scalable IO in Java,Java 相关的 PPT。
异步 I/O 的实现和设计方式。
- IBM - Boost application performance using asynchronous I/O ,于 AIO 的文章。
- Lazy Asynchronous I/O For Event-Driven Servers
- Windows I/O Completion Ports 异步 I/O 模型中IOCP。 Inside I/O Completion Ports
- Windows Internals 这本书仔细读一下,其中有一节 I/O Processing 也是很不错的,网上免费的链接I/O Processing 可以看看 Windows 是怎么玩的。
- Libevent 2.0 book、国人写的电子书 《Libevent 深入浅出》。
- 官网的 Libuv Design Overview
基本上来说,异步 I/O 模型的发展技术是: select -> poll -> epoll -> aio -> libevent -> libuv。
编程模式——Reactor 模式。下面是这个模式的相关文章(读这三篇就够了)。
- Understanding Reactor Pattern: Thread-Based and Event-Driven
- Reactor Pattern
- The reactor pattern and non-blocking IO
几篇有意思的延伸阅读文章。
- The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution - C10M 问题来了……
- 还有几篇可能有争议的文章,让你从不同的角度思考。
Lock-Free 编程相关
Lock-Free - 所以如果想开发出一个高性能的程序,你就非常有必要学习 Lock-Free 的编程方式。关于无锁的数据结构。
Is Parallel Programming Hard, And, If So, What Can You Do About It? ,书堪称并行编程的经典书。
并发编程中的一些概念:Non-blocking algorithm 、Read-copy-update 和 Seqlock。
两篇论文 。
- Implementing Lock-Free Queues, 文章为“无锁队列的实现”。
- Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms ,这篇论文给出了一个无阻塞和阻塞的并发队列算法。
有几个博客要订阅一下。
- 1024cores - 德米特里·伐由科夫(Dmitry Vyukov)的和 lock-free 编程相关的网站。
- Paul E. McKenney - 保罗(Paul)的个人网站。
- Concurrency Freaks - 关于并发算法和相关模式的网站。
- Preshing on Programming - 加拿大程序员杰夫·普莱辛(Jeff Preshing)的技术博客,主要关注 C++ 和 Python 两门编程语言。他用 C++11 实现了类的反射机制,用 C++ 编写了 3D 小游戏 Hop Out,还为该游戏编写了一个游戏引擎。他还讨论了很多 C++ 的用法,比如 C++14 推荐的代码写法、新增的某些语言构造等,和 Python 很相似。阅读这个技术博客上的内容能够深深感受到博主对编程世界的崇敬和痴迷。
- Sutter’s Mill - 赫布·萨特(Herb Sutter)是一位杰出的 C++ 专家,曾担任 ISO C++ 标准委员会秘书和召集人超过 10 年。他的博客有关于 C++ 语言标准最新进展的信息,其中也有他的演讲视频。博客中还讨论了其他技术和 C++ 的差异,如 C# 和 JavaScript,它们的性能特点、怎样避免引入性能方面的缺陷等。
- Mechanical Sympathy - 博主是马丁·汤普森(Martin Thompson),他是一名英国的技术极客,探索现代硬件的功能,并提供开发、培训、性能调优和咨询服务。他的博客主题是 Hardware and software working together in harmony,里面探讨了如何设计和编写软件使得它在硬件上能高性能地运行。非常值得一看。
编程相关的一些 C/C++ 的类库,这样你就不用从头再造轮子了(对于 Java 的,请参看 JDK 里的 Concurrent 开头的一系列的类)。
- Boost.Lockfree - Boost 库中的无锁数据结构。
- ConcurrencyKit - 并发性编程的原语。
- Folly - Facebook 的开源库(它对 MPMC 队列做了一个很好的实现)。
- Junction - C++ 中的并发数据结构。
- MPMCQueue - 一个用 C++11 编写的有边界的“多生产者 - 多消费者”无锁队列。
- SPSCQueue - 一个有边界的“单生产者 - 单消费者”的无等待、无锁的队列。
- Seqlock - 用 C++ 实现的 Seqlock。
- Userspace RCU - liburcu 是一个用户空间的 RCU(Read-copy-update,读 - 拷贝 - 更新)库。
- libcds - 一个并发数据结构的 C++ 库。
- liblfds - 一个用 C 语言编写的可移植、无许可证、无锁的数据结构库。
其他
All about 64-bit programming in one place,关于 64 位编程相关的收集页面,其中包括相关的文章、28 节课程,还有知识库和相关的 blog。
What Scalable Programs Need from Transactional Memory ,事务性内存(TM)一直是许多研究的重点,它在诸如 IBM Blue Gene/Q 和 Intel Haswell 等处理器中得到了支持。许多研究都使用 STAMP 基准测试套件来评估其设计。
例如,在 IBM Blue Gene/Q 上有 64 个线程,我们观察到使用 Blue Gene/Q 硬件事务内存(HTM)的中值加速比为 1.4 倍,使用软件事务内存(STM)的中值加速比为 4.1 倍。什么限制了这些 TM 基准的性能?在本论文中,作者认为问题在于用于编写它们的编程模型和数据结构上,只要使用合适的模型和数据结构,程序的性能可以有 10 多倍的提升。
Improving OpenSSL Performance ,这篇文章除了教你如何提高 OpenSSL 的执行性能,还讲了一些底层的性能调优知识。
- 关于压缩的内容,两篇实践性很强的文章。
- How eBay’s Shopping Cart used compression techniques to solve network I/O bottlenecks ,讲述了 eBay 是如何通过压缩数据来提高整体服务性能的,其中有几个比较好的压缩算法。
- Linkedin: Boosting Site Speed Using Brotli Compression ,LinkedIn 在 2017 年早些时候开始使用 Brotli 来替换 gzip,以此带来更快的访问,这篇文章讲述了什么是 Brotli 以及与其它压缩程序的比较和所带来的性能提升。
- Performance Testing with SSDs, Part 1 和 Performance Testing with SSDs Part 2 ,这两篇文章介绍了测试 SSD 硬盘性能以及相关的操作系统调优方法。
Secure Programming HOWTO - Creating Secure Software ,其中有繁体中文的翻译,这本电子书讲了 Linux/Unix 下的一些安全编程方面的知识。
相关论文
Hints for Computer System Design ,计算机设计的忠告,这是 ACM 图灵奖得主 Butler Lampson 在 Xerox PARC 工作时的一篇论文。这篇论文简明扼要地总结了他在做系统设计时的一些想法,非常值得一读。(用他的话来说,“Studying the design and implementation of a number of computer has led to some general hints for system design. They are described here and illustrated by many examples, ranging from hardware such as the Alto and the Dorado to application programs such as Bravo and Star“。)
The 5 minute rule for trading memory for disc accesses and the 5 byte rule for trading memory for CPU time ,根据文章名称也可以看出,5 分钟法则是用来衡量内存与磁盘的,而 5 字节法则则是在内存和 CPU 之间的权衡。这两个法则是 Jim Gray 和 Franco Putzolu 在 1986 年的文章。
在该论文发表 10 年后的 1997 年,Jim Gray 和 Goetz Graefe 又在 The Five-Minute Rule Ten Years Later and Other Computer Storage Rules of Thumb 中对该法则进行了重新审视。2007 年,也就是该论文发表 20 年后,这年的 1 月 28 日,Jim Gray 驾驶一艘 40 英尺长的船从旧金山港出海,目的是航行到附近的费拉隆岛,在那里撒下母亲的骨灰。出海之后,他就同朋友和亲属失去了联系。为了纪念和向大师致敬,时隔 10 多年后的 2009 年 Goetz Graefe 又发表了 The Five-Minute Rule 20 Years Later (and How Falsh Memory Changes the Rules)。
注明一下,Jim Gray 是关系型数据库领域的大师。因在数据库和事务处理研究和实现方面的开创性贡献而获得 1998 年图灵奖。美国科学院、工程院两院院士,ACM 和 IEEE 两会会士。他 25 岁成为加州大学伯克利分校计算机科学学院第一位博士。在 IBM 工作期间参与和主持了 IMS、System R、SQL/DS、DB2 等项目的开发。后任职于微软研究院,主要关注应用数据库技术来处理各学科的海量信息。
小结
异步 I/O 模型、 Lock-Free 。其它一些重要知识,如 64 位编程、提高 OpenSSL 的执行性能、压缩、SSD 硬盘性能测试等。最后介绍了几篇对学习和巩固这些知识非常有帮助的论文
极客时间-左耳听风-程序员攻略-异步I/O模型和Lock-Free编程的更多相关文章
- 极客时间-左耳听风-程序员攻略-UI/UX设计
程序员练级攻略:UI/UX设计 学习设计新手, 7 steps to become a UI/UX designer 学习设计的一些原则和套路,如配色.平衡.排版.一致性等. 用户体验的 4D 步骤- ...
- 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络
程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...
- 极客时间-左耳听风-程序员攻略-Java底层知识
Java 字节码相关 字节码编程,也就是动态修改或是动态生成 Java 字节码.Java 的字节码相当于汇编,其中的一些细节. Java Zone: Introduction to Java Byte ...
- 【ARTS】01_22_左耳听风-201900408~2019004014
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_21_左耳听风-201900401~201900407
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_20_左耳听风-20190325~20190331
zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...
- 【ARTS】01_19_左耳听风-20190318~20190324
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_18_左耳听风-20190311~20190317
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
随机推荐
- Selenium(十一)使用EXCEL读取用户数据和生成测试报表
1.下载两个模块 2.xlrd的使用方法 3.使用excel获取数据 在userdata文件中增加代码: login.py: 4.使用excel生成测试报表 举例: 在log_module中定义函数: ...
- 2019HDU多校第六场1009 Three Investigators——杨表
题意 给定一个 n 个元素的数列,从前 k 个元素中取5次不下降子序列,求取得的和的最大值(k从1至n) 分析 考虑将数字 a[i] 拆成 a[i] 个 a[i],比如 “4,1,2”→“4,4,4, ...
- js实现填写身份证号、手机号、准考证号等信息自动空格的效果
咱们做网站的,用户体验那是相当重要的,比如12306抢票需要填写身份证,如果不空格,密密麻麻的给我一种很压抑的感觉,而且也不容易核对信息是否填写正确,所以我就写了一个利用Js实现填写身份证号.手机号. ...
- 给json数组添加新字段并赋值
zNodes.forEach(function(item) { item.newtitle ="点击加号设为主席会场"; });
- MySQL 中索引的长度的限制
单列索引的长度的限制 (5.6里面默认不能超过767bytes,5.7不超过3072bytes): 起因是256×3-1=767.这个3是字符最大占用空间(utf8).但是在5.5以后,开始支持4个字 ...
- Spring boot请求参数
GET请求: 1.restful风格: @GetMapping("/order/detail") public BaseOutput omsQueryDetail(@Request ...
- Codevs 2492 上帝造题的七分钟 2(线段树)
时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. " ...
- 串结构练习——字符串连接(SDUT 2124)
Problem Description 给定两个字符串string1和string2,将字符串string2连接在string1的后面,并将连接后的字符串输出. 连接后字符串长度不超过110. Inp ...
- c++ 使用类生成随机数
// generate algorithm example #include <iostream> // cout #include <algorithm> // genera ...
- bash基础之三配置文件
一.shell的两种登录方式: 1.交互式登录:(1)直接通过终端输入账号密码登录(2)使用“su - UserName” 或“su -l Username”切换的用户执行顺序:/etc/profil ...