本文目錄一覽:
- 1、有人能說清楚JAVA7 NIO NETTY IOCP之間的聯繫嗎
- 2、為什麼說Java NIO 是非阻塞的
- 3、java nio 服務器架構有哪些
- 4、java裡面的NIO是什麼,有什麼用?
- 5、java 提供了哪些IO方式
有人能說清楚JAVA7 NIO NETTY IOCP之間的聯繫嗎
早期網絡訪問的做法是,連接以後,就等待對方應答,對方沒有應答,代碼就會死在那裡。這稱為阻塞式通訊。
後來,java 1.4 開始引入了nio, nio是非阻塞式網絡通訊. 其實可以理解為系統去掃描端口,如果有返回就處理,沒有的話,代碼就繼續做別的事。
不過nio的編碼比較麻煩,雖然性能好,可是很多代碼還在用阻塞,因為代碼簡單,很多例子上也是socket的。
然後高麗人開發了apache的mina,可以快速開發nio。
後來高麗人離開apache,開發了netty,提供了另一種調用nio的framework。
現在mina和netty是最常用的nio框架。
至於iocp,這個是個系統級的實現,其實類似nio,不過是通過操作系統來實現的。而且只支持windows。java 7以後把iocp引入,提供了快速開發的接口。不過不是很推薦使用。系統實現就表示iocp不再是跨平台的。那麼實用性就差很多了。
為什麼說Java NIO 是非阻塞的
NIO之前的IO流要實現非阻塞得用戶程序創建線程實現,每個線程內部用阻塞判斷IO中斷.而線程太佔資源.不適用於IO高並發.為解決線程太佔資源問題還提供了線程池框架.但也沒完全解決IO高並發問題.
NIO框架則採取用戶程序將IO需求註冊入NIO框架,NIO框架用單線程循環查詢全部IO需求,並分派響應IO需求.這樣的好處是減少了高並發時的線程切換.用戶程序編程上看沒有阻塞的方法調用.
java nio 服務器架構有哪些
1,一個小的線程池負責dispatch NIO事件。
2,註冊事件,即操作selecter時,要使用一個同步鎖(即Architecture of a Highly Scalable NIO-Based Server一文中的guard對象),即對同一個selector的操作是互斥的。
3,這個小的線程池不處理邏輯業務,大小可以是Runtime.getRuntime().availableProcessors() + 1,即你系統有效CPU個數+1。這是因為我們假設有一個線程專門處理accept事件,
而其他線程處理read/write操作。
java裡面的NIO是什麼,有什麼用?
NIO即New IO,這個庫是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但實現方式不同,NIO主要用到的是塊,所以NIO的效率要比IO高很多。
在Java API中提供了兩套NIO,一套是針對標準輸入輸出NIO,另一套就是網絡編程NIO。
java 提供了哪些IO方式
Java IO 方式有很多種,基於不同的 IO 抽象模型和交互方式,可以進行簡單區分。
首先,傳統的 java.io 包,它基於流模型實現,提供了我們最熟知的一些 IO 功能,比如 File 抽象、輸入輸出流等。交互方式是同步、阻塞的方式,也就是說,在讀取輸入流或者寫入輸出流時,在讀、寫動作完成之前,線程會一直阻塞在那裡,它們之間的調用是可靠的線性順序。
java.io 包的好處是代碼比較簡單、直觀,缺點則是 IO 效率和擴展性存在局限性,容易成為應用性能的瓶頸。
很多時候,人們也把 java.net 下面提供的部分網絡 API,比如 Socket、ServerSocket、HttpURLConnection 也歸類到同步阻塞 IO 類庫,因為網絡通信同樣是 IO 行為。
第二,在 Java 1.4 中引入了 NIO 框架(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,可以構建多路復用的、同步非阻塞 IO 程序,同時提供了更接近操作系統底層的高性能數據操作方式。
第三,在 Java 7 中,NIO 有了進一步的改進,也就是 NIO 2,引入了異步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)。異步 IO 操作基於事件和回調機制,可以簡單理解為,應用操作直接返回,而不會阻塞在那裡,當後台處理完成,操作系統會通知相應線程進行後續工作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270257.html