日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

JDK——NIO系统调用浅析

發布時間:2024/10/5 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK——NIO系统调用浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概要

NIO(Non-blocking I/O,在Java領域,也稱為New I/O),是一種同步非阻塞的I/O模型,也是I/O多路復用的基礎,已經被越來越多地應用到大型應用服務器,成為解決高并發與大量連接、I/O處理問題的有效方式。

類圖

類關系圖

SelectorProvider類圖

Selector類圖

Channel類圖

FileChannel 從文件中讀寫數據。

DatagramChannel 能通過UDP讀寫網絡中的數據。

SocketChannel 能通過TCP讀寫網絡中的數據。

ServerSocketChannel可以監聽新進來的TCP連接,像Web服務器那樣。對每一個新進來的連接都會創建一個SocketChannel。

Pipe類圖

實現

NIO并沒有完全屏蔽平臺差異,它仍然是基于各個操作系統的I/O系統實現的,差異仍然存在。

不同操作系統提供 不同的 SelectorProvider 實現

SelectorProvider 可以通過DefaultSelectorProvider 或者jvm參數java.nio.channels.spi.SelectorProvider加載

SelectorProvider 可以 open 各種channel 、pipe、selector

SelectorProvider

Window

select模型

  • 并發性能不是很好。而且FD_SETSIZE不能超過Windows下層提供者的限制,這個限制通常是1024。

Linux

JDK里,Java標準庫和部分工具的源碼中,BSD和Linux的平臺相關源碼都是在solaris目錄里的。 原本Sun
JDK的源碼里平臺相關的目錄就是從solaris和windows這兩個目錄開始的,后來Unix系列的平臺相關代碼全都放在solaris目錄下了,共用大部分代碼。

下載OpenJDK源碼

Epoll是Linux下多路復用IO接口select/poll的增強版本,它能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率,因為它會復用文件描述符集合來傳遞結果而不用迫使開發者每次等待事件之前都必須重新準備要被偵聽的文件描述符集合,另一點原因就是獲取事件的時候,它無須遍歷整個被偵聽的描述符集,只要遍歷那些被內核IO事件異步喚醒而加入Ready隊列的描述符集合就行了。epoll除了提供select/poll那種IO事件的電平觸發(Level Triggered)外,還提供了邊沿觸發(Edge Triggered),這就使得用戶空間程序有可能緩存IO狀態,減少epoll_wait/epoll_pwait的調用,提高應用程序效率。

epoll native 方法


openjdk\jdk\src\solaris\native\sun\nio\ch\EPoll.c

openjdk\jdk\src\solaris\classes\sun\nio\ch\EPoll.java

MacOS NIO 實現

KQueue

流程

參考文章

  • 為什么OpenJDK只有share,solaris,windows下有源碼而bsd和linux沒有呢?
  • Improving (network) I/O performance …
  • Java從BIO到NIO,多路復用select、poll和epoll與JDK的關系
  • 淺談NIO和Epoll的實現原理

總結

以上是生活随笔為你收集整理的JDK——NIO系统调用浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。