以前的兩篇文章 FastThreadLocal怎麼Fast?、ScheduledThreadPoolExecutor源碼解讀 搞的我心力交瘁,且讀源碼過程當中深感功力不足,遂決定「磨刀」——先達到較熟練使用netty的程度,再回過頭來繼續啃源碼!至於「磨刀石」嘛,選擇了《Netty權威指南》(第二版)……哎呦,不錯奧!java
其實本篇文章更像是一篇讀書筆記,記錄了Linux網絡模型的相關知識。爲何要關注Linux網絡模型?由於java的各I/O模型與之關係緊密!編程
書中根據UNIX網絡編程,做了5種I/O模型分類:segmentfault
最簡單的一種,等待直至完成的過程,很少做解釋。網絡
這種也很好理解,由阻塞I/O
的死等系統響應進化成屢次調用查看數據就緒狀態。異步
select/poll,以及它的加強版epoll
就屬於該種模型。與非阻塞I/O模型相比,愚覺得有兩點優點:spa
阻塞在select事件
上,數據就緒系統予以通知。這裏多提一句,epoll把消息通知給用戶空間時避免了內存複製(0拷貝),使用的mmap技術,即內核和用戶空間映射到同一內存實現。netty
應用進程創建SIGIO信號處理程序時,是非阻塞
的。而數據就緒時,以SIGIO信號的形式通知到用戶進程。code
特色是,幾乎所有交由系統處理,數據處理完畢後,才通知到用戶進程。blog
以上的描述中,是否是不少詞句都在java I/O相關的世界中聽到過?是的——阻塞I/O對應BIO,epoll之於NIO,NIO的多路複用技術對標I/O複用模型,以及AIO和異步I/O模型……進程
好了,that's all,小記就要有小記的樣子。最後,再次推薦《Netty權威指南》!