linux下的非同步IO(AIO)是否已成熟?

unpv1里說該技術還未成熟,介紹得很簡單。不過該書比較舊了,連epoll都沒有介紹,所以不知道現在非同步io是否已成熟。


先佔個坑。回頭再來答。

我想大部分和我差不多年齡接觸系統編程的朋友讀書的時候了解的都是 POSIX aio,那個東西是 glibc 在用戶態用 pthread 實現的,用回調或者 signal 通知(記得是這樣,回頭去查一下)。

後來的 kernel aio 沒有跟進,我想像我這樣普通程序員也不太會有機會用到 linux aio。這裡有一個鏈接:麥子邁 | Linux kernel AIO這個奇葩。


不成熟。glibc 的 aio 有 bug , kernel 的 aio 只能以 O_DIRECT 方式做直接 IO , libeio 也是 beta 階段。

epoll 是成熟的,但是 epoll 本身是同步的。Linux 上目前沒有像 IOCP 這樣的成熟非同步 IO 實現。


epoll 在APUE 等都沒有講。但是linux專著中都作為重點了!


目前比較知名的非同步IO有:

Glibc AIO: Boost application performance using asynchronous I/O

Kernel Native AIO: Kernel Asynchronous I/O (AIO) Support for Linux

Glibc AIO的原理比較簡單,採用多線程模擬,但存在一些bug和設計上的不合理。詳見:http://davmac.org/davpage/linux/async-io.html。

Kernel AIO 是真正的能做到內核的非同步通知,目前nginx有添加AIO,但它同樣有一些缺陷:https://forum.nginx.org/read.php?2,113524,113587#msg-113587

libev的作者後來也寫了一個libeio,設計上吸取了前兩個的經驗,使用了一些更tricky的方法,但關於成熟度的問題看介紹頁 http://software.schmorp.de/pkg/libeio.html 的第一句話:

Event-based fully asynchronous I/O library for C (used by IO::AIO). Currently in BETA!


你要先明確問的是內核還是用戶態


epoll已經相當成熟

aio平時用得比較少(沒有情況需要用到),客人也沒有這類需求

先匿,會繼續補充


推薦閱讀:

如何在最短時間內掌握Linux精髓?
【技術人快報189期】Linux補丁是「完全無用的垃圾」+上海銀行探索智能運維
作為一個機房運維維護人員,對linux的學習多深才算合格??
從 X86 到 ARM 的移植,為什麼 Windows 的兼容性看起來沒有像Linux、OS X那樣好?

TAG:Linux | 網路編程 |