<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    java epoll

    文檔

    java epoll

    epoll是Linux內核為處理大批量文件描述符而作了改進的poll,是Linux下多路復用IO接口select或poll的增強版本,能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。
    推薦度:
    導讀epoll是Linux內核為處理大批量文件描述符而作了改進的poll,是Linux下多路復用IO接口select或poll的增強版本,能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。

    java epoll是什么,讓我們一起了解一下?

    epoll是Linux內核為處理大批量文件描述符而作了改進的poll,是Linux下多路復用IO接口select或poll的增強版本,能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。

    如何實現epoll的接口?

    1、創建epoll句柄。

    2、將被監聽的描述符添加到epoll句柄或從epool句柄中刪除或者對監聽事件進行修改。

    3、等待事件觸發,當超過timeout還沒有事件觸發時,就超時。

    在Java中epoll的優點有哪些?

    1、支持一個進程打開大數目的socket描述符。

    2、IO效率不隨FD數目增加而線性下降。

    3、沒有使用mmap加速內核與用戶空間的消息傳遞。

    如何使用多路復用的服務端程序,來演示JavaAPI中提供的方法與底層epoll函數實現的具體關系?

    首先程序運行后服務端啟動并綁定9090端口,等待客戶端連接,讀取到客戶端消息后再直接把消息后回復給客戶端。

    示例代碼如下:

    import?java.io.IOException;
    import?java.net.InetSocketAddress;
    import?java.nio.ByteBuffer;
    import?java.nio.channels.*;
    import?java.util.Iterator;
    import?java.util.Set;
    public?class?SocketMultiplexIO?{
    ????private?static?Selector?selector;
    ????public?static?void?main(String[]?args)?throws?Exception?{
    ????????ServerSocketChannel?serverSocketChannel?=?ServerSocketChannel.open();
    ????????serverSocketChannel.bind(new?InetSocketAddress(9090));
    ????????serverSocketChannel.configureBlocking(false);
    ????????selector?=?Selector.open();
    ????????serverSocketChannel.register(selector,?SelectionKey.OP_ACCEPT);
    ????????System.out.println("服務端啟動了。。。");
    ????????while?(true)?{
    ????????????Set?keys?=?selector.keys();
    ????????????System.out.println("當前epoll注冊的事件:"?+?keys.size());
    ????????????while?(selector.select()?>?0)?{
    ????????????????Set?selectionKeys?=?selector.selectedKeys();
    ????????????????Iterator?iterator?=?selectionKeys.iterator();
    ????????????????while?(iterator.hasNext())?{
    ????????????????????SelectionKey?selectionKey?=?iterator.next();
    ????????????????????iterator.remove();
    ????????????????????if?(selectionKey.isAcceptable())?{
    ????????????????????????System.out.println("有一個客戶端連接了。。。");
    ????????????????????????acceptHandler(selectionKey);
    ????????????????????}?else?if?(selectionKey.isReadable())?{
    ????????????????????????selectionKey.cancel();
    ????????????????????????System.out.println("cancel函數,取消了accept事件");
    ????????????????????????readHandler(selectionKey);
    ????????????????????}
    ????????????????}
    ????????????}
    ????????}
    ????}
    ????private?static?void?readHandler(SelectionKey?key)?{
    ????????SocketChannel?client?=?(SocketChannel)?key.channel();
    ????????ByteBuffer?buffer?=?(ByteBuffer)?key.attachment();
    ????????buffer.clear();
    ????????int?read;
    ????????try?{
    ????????????while?(true)?{
    ????????????????read?=?client.read(buffer);
    ????????????????if?(read?>?0)?{
    ????????????????????buffer.flip();
    ????????????????????while?(buffer.hasRemaining())?{
    ????????????????????????client.write(buffer);
    ????????????????????}
    ????????????????????buffer.clear();
    ????????????????}?else?if?(read?==?0)?{
    ????????????????????break;
    ????????????????}?else?{
    ????????????????????client.close();
    ????????????????????break;
    ????????????????}
    ????????????}
    ????????}?catch?(IOException?e)?{
    ????????????e.printStackTrace();
    ????????}
    ????}
    ????private?static?void?acceptHandler(SelectionKey?selectionKey)?throws?IOException?{
    ????????ServerSocketChannel?serverSocketChannel?=?(ServerSocketChannel)?selectionKey.channel();
    ????????SocketChannel?accept?=?serverSocketChannel.accept();
    ????????accept.configureBlocking(false);
    ????????ByteBuffer?byteBuffer?=?ByteBuffer.allocateDirect(1024);
    ????????accept.register(selector,?SelectionKey.OP_READ,?byteBuffer);
    ????}
    }

    以上就是小編今天的分享了,希望可以幫助到大家。

    文檔

    java epoll

    epoll是Linux內核為處理大批量文件描述符而作了改進的poll,是Linux下多路復用IO接口select或poll的增強版本,能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    java error java escape java event java exchange java execute 微信群怎么找 怎么導出微信聊天記錄 蘋果手機怎么恢復出廠設置 qq怎么清理緩存和垃圾清理 朋友圈怎么轉發 微信分組怎么刪除 兩個excel如何獨立顯示 excel怎么排序 計算機管理怎么打開 java jep java jetty java jit java jmeter java jmh java jndi java environment java enterprise java generic java enhancer java generator java future java encapsulation java empty java email java ehcache java echarts java formatter java ecc加密 java fork java foreach循環 java ear java flume java dynamic java dto java drools
    Top 亚洲精品线路一在线观看| 久久99国产乱子伦精品免费| 国产成人久久精品77777综合| 久久国产免费观看精品| 亚洲欧洲久久久精品| 九九热在线视频精品| 91精品国产综合久久青草| 国产综合精品蜜芽| 精品女同一区二区| 嫩草影院在线观看精品视频| 亚洲国产精品yw在线观看| 久久精品免看国产| 国产A三级久久精品| 国产成人精品久久综合| 国产美女精品人人做人人爽| 国内精品乱码卡1卡2卡3免费| 99re热这里有精品首页视频| 国产国产精品人在线视| 91久久精品91久久性色| 国产乱人伦偷精品视频| 精品中文字幕一区在线| 国产精品美女流白浆视频| 人妻少妇精品视频三区二区一区| 亚洲理论精品午夜电影| 99久热re在线精品视频| 久久精品国产亚洲AV麻豆王友容 | 久久99精品波多结衣一区| 99久久成人国产精品免费| 国产乱子伦精品免费视频| mm1313亚洲精品国产| 色婷婷噜噜久久国产精品12p| 精品久久中文网址| 日韩精品国产丝袜| 国产精品亚洲а∨无码播放不卡 | 国产精品99久久久久久宅男小说| 亚洲精品一区二区三区四区乱码| 久久亚洲精品成人AV| 538精品视频在线观看mp4| 91精品国产网曝事件门| 久久精品国产亚洲av麻豆蜜芽 | 99re最新地址精品视频|