極客時間-左耳聽風-程序員攻略-異步I/O模型和Lock-Free編程

異步 I/O 模型

異步 I/O 模型其中的設計模式或是解決方法能夠借鑑到分佈式架構上來。html

史蒂文斯(Stevens)在《UNIX 網絡編程》一書 6.2 I/O Models 中介紹了五種 I/O 模型。react

  • 阻塞 I/O
  • 非阻塞 I/O
  • I/O 的多路複用(select 和 poll)
  • 信號驅動的 I/O(SIGIO)
  • 異步 I/O(POSIX 的 aio_functions)

C10K Problem ,瞭解 I/O 模型linux

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 模型,並且還有各類比較細節的方案和說明。git

Scalable IO in Java,Java 相關的 PPT。程序員

異步 I/O 的實現和設計方式。github

基本上來講,異步 I/O 模型的發展技術是: select -> poll -> epoll -> aio -> libevent -> libuv。算法

編程模式——Reactor 模式。下面是這個模式的相關文章(讀這三篇就夠了)。shell

幾篇有意思的延伸閱讀文章。數據庫

Lock-Free 編程相關

Lock-Free - 因此若是想開發出一個高性能的程序,你就很是有必要學習 Lock-Free 的編程方式。關於無鎖的數據結構。編程

Is Parallel Programming Hard, And, If So, What Can You Do About It? ,書堪稱並行編程的經典書。

併發編程中的一些概念:Non-blocking algorithmRead-copy-updateSeqlock

兩篇論文 。

有幾個博客要訂閱一下。

  • 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 語言編寫的可移植、無許可證、無鎖的數據結構庫。

其餘

相關論文

  • 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 硬盤性能測試等。最後介紹了幾篇對學習和鞏固這些知識很是有幫助的論文

相關文章
相關標籤/搜索