Java NIO之Selector

來源:互聯網
上載者:User

標籤:

選取器是JavaNIO重磅推出的一個概念;在舊有的系統中為了跟蹤多連接埠訊息,需要為每一個連接埠配備一個線程做監聽;但是有了selector就不需要了,一個Selector可以管理一眾渠道(channel)。

選取器的本質就是:讓監聽的工作由選擇起來做;它會定時執行來擷取註冊到他那裡的渠道是否已經準備就緒,比如socketServerChannel是否有新的訊息過來(是否做好了accept的準備);然後他會把這個channel放入到一個集合中(SelectedKeys),遍曆一遍之後,就可以,你就可以通過方為那個集合來擷取需要處理的渠道了。這就像Java NIO搞了一個看園老大爺,定時會到在草莓園走一圈,將所有的成熟的草莓放入到籃子中,採摘完成後把籃子放在門口;這個時候你再安排工作人員(Thread)取走草莓(吃到,深加工都可以哦)。

舊有的模式則是直接為每一個草莓樹(草莓是樹上接的吧)安排一個人(線程),來定時觀察,發現熟了,便進行處理。這樣是不是成本很高呢?現有的機制,如果沒有草莓,我也不需要安排更多的人力監控草莓的情況,讓他們(資源)幹更重要的事情;只有需要的時候再安排他們處理。

接著上面的隱喻,草莓園就是選取器(Selector),園丁就是執行selector.select()的線程。草莓就是渠道(SelectableChannel),如果想要把草莓放到草莓園中,需要通過草莓栽種(SelectableChannel.register());籃子呢?就是SelectedKeys。

回到冰冷的顯示,SelectionKey裡面定義了幾種操作,Read,Write,connect以及accept,SelectionKey的建立來自於草莓的栽種,SelectableChannel.register(Selector sel, int ops, Object att),操作是通過ops來進行的。本質上就是在註冊的時候已經指定了需要園丁(selector.select())監控的內容;監控內容不能放在渠道上面,不能告訴園丁,那就在草莓上面掛的小牌子(SelectionKey)上面記下了。

最後說一下工作人員,如果籃子裡面的草莓很多,或者深度加工時間很長,能是單線程處理,可能需要一個線程池來進行處理,保證準備好的渠道可以儘快被處理,並且盡量互不干擾。

Java NIO之Selector

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.