国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java nio 空輪詢bug

beanlam / 1037人閱讀

這個應該是很老的bug了,linux平臺,jdk6好像就修復了

bug 描述 :https://bugs.java.com/bugdata...

This is an issue with poll (and epoll) on Linux. If a file descriptor for a connected socket is polled with a request event mask of 0, and if the connection is abruptly terminated (RST) then the poll wakes up with the POLLHUP (and maybe POLLERR) bit set in the returned event set. The implication of this behaviour is that Selector will wakeup and as the interest set for the SocketChannel is 0 it means there aren"t any selected events and the select method returns 0.

之前一直不知道event mask 為0 代表啥,知道翻到了資料

http://man7.org/linux/man-pag...

The field events is an input parameter, a bit mask specifying the
events the application is interested in for the file descriptor fd.
This field may be specified as zero, in which case the only events
that can be returned in revents are POLLHUP, POLLERR, and POLLNVAL
(see below).

大概知道了0代表了POLLHUP, POLLERR, and POLLNVA 這些event

繼續查閱https://blog.csdn.net/tilter/...

常量    說明
POLLIN 普通或優先級帶數據可讀
POLLRDNORM 普通數據可讀
POLLRDBAND 優先級帶數據可讀
POLLPRI 高優先級數據可讀
POLLOUT 普通數據可寫
POLLWRNORM 普通數據可寫
POLLWRBAND 優先級帶數據可寫
POLLERR 發生錯誤
POLLHUP 對方描述符掛起
POLLNVAL 描述字不是一個打開的文件

大概明白了Bug描述中 abruptly terminated (RST)的含義及發生場景

也就知道什么時候會發生空輪詢bug

個人記錄下

還有1問題沒想明白,為啥先cancel,再select(or selectNow) 還是無法避免這個問題? ref: https://www.cnblogs.com/JAYIT...
網上說,在多線程環境下,selectNow先發生,cancel后發生,這樣還是會存在問題
但是,即使cancel后發生,channel也會被移到待移除channel集合了,下次再輪詢的時候,select也會出發這個集合里面的channel被清除
這樣,最多多一次空輪訓。
目前給的方案都是open一個新的selector,把有效的channel全部注冊到新的selector,再輪詢新的selector

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76839.html

相關文章

  • 【Netty】學習NioEventLoop

    摘要:主從模型主從多線程多個的線程池用于接受客戶端的連接。負責多路分離已連接的,讀寫網絡數據,將業務處理功能扔給線程池完成。比如在線程內部進行串行操作,避免多線程競爭造成的性能問題。 歡迎關注公眾號:【愛編程】如果有需要后臺回復2019贈送1T的學習資料哦!! showImg(https://upload-images.jianshu.io/upload_images/13150128-3c...

    tulayang 評論0 收藏0
  • JDK中關于BIO,NIO,AIO,同步,異步介紹

    摘要:即可以理解為,方法都是異步的,完成后會主動調用回調函數。主要在包下增加了下面四個異步通道其中的方法,會返回一個帶回調函數的對象,當執行完讀取寫入操作后,直接調用回調函數。 本文原創地址,我的博客:jsbintask.cn/2019/04/16/…(食用效果最佳),轉載請注明出處! 在理解什么是BIO,NIO,AIO之前,我們首先需要了解什么是同步,異步,阻塞,非阻塞。假如我們現在要去銀行取...

    opengps 評論0 收藏0
  • #yyds干貨盤點# Netty源碼分析之Reactor線程模型詳解

    摘要:啟動然后一路執行到方法中,調用方法啟動線程。的執行流程中的方法是一個無限循環的線程,在該循環中主要做三件事情,如圖所示。而這個喚醒是沒有任何讀寫請求的,從而導致線程在做無效的輪詢,使得占用率較高。 上一篇文章,分析了Netty服務端啟動的初始化過程,今天我們來分析一下Netty中的Reactor線程模型在分析源...

    番茄西紅柿 評論0 收藏2637
  • java-netty-Netty in Action 5th-ch1-Netty and Java

    摘要:一個多路復用器可以負責成千上萬的通道,沒有上限。不需要通過對多路復用器對注冊的通道進行輪詢操作即可實現異步讀寫,從而簡化編程模型。同時,支持支持如果是怎么辦最后,到目前位置,支持不支持二無法擴展作為的核心,無法擴展,私有構造函數。 前言 netty 學習 基于 netty in action 5th, 官網資料,網絡博客等 1.1 Why Netty? netty 是一個中間層的抽象 ...

    LeviDing 評論0 收藏0
  • Netty序章之BIO NIO AIO演變

    摘要:后改良為用線程池的方式代替新增線程,被稱為偽異步。最大的問題是阻塞,同步。每次請求都由程序執行并返回,這是同步的缺陷。這些都會被注冊在多路復用器上。多路復用器提供選擇已經就緒狀態任務的能力。并沒有采用的多路復用器,而是使用異步通道的概念。 Netty是一個提供異步事件驅動的網絡應用框架,用以快速開發高性能、高可靠的網絡服務器和客戶端程序。Netty簡化了網絡程序的開發,是很多框架和公司...

    VincentFF 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<