java selector 源码_基于selector的源码分析和理解、思想和应用实践
來自京東架構師(JAVA)歡迎關注我的微信公眾號java2arch,更多技術文章可看。
一個連接請求connetion request過來,產生一個通道channel(包含并封裝了connection),channel注冊到selector的set集合環(huán)上,服務端主線程死循環(huán)while(true)獲取channel(有事件的,如枚舉可讀、可寫、連接、連接就緒),根據(jù)事件枚舉switch分支判斷,通過獲取的channel讀請求數(shù)據(jù)、寫響應數(shù)據(jù)、發(fā)送心跳回應、記錄日志等等。
客戶端與服務端建立連接獲得單個channel,可以讀寫數(shù)據(jù)。
精華思想:面對高并發(fā)的客戶端連接和數(shù)據(jù)傳輸,服務端主線程不需要阻塞等待建立連接、讀寫數(shù)據(jù)等,通過注冊通道事件驅動異步處理高并發(fā)的讀寫等操作。請求來了,先放到環(huán)形集合里,有讀寫數(shù)據(jù)了,告訴我我再來處理,在這之前,我可以干別的事情或休息,不是站著在門口干等。在進一步,主線程就是老板,來活了告訴老板,老板來了,可以分配給其他小廝做,這樣效率和吞吐量就比老板一個人干要強多了吧。boss->woker模型,worker可以是線程池驅動的。netty.使用了事件驅動、異步、多線程高并發(fā)的技術和思想。另外呢,考慮引進AIO和零拷貝以及channe責任鏈式的處理handle和filter\chain機制,引入高效序列化、網絡心跳保持防火墻開放技術、解決分包、粘包、丟包、以及安全的策略和機制。
總結
以上是生活随笔為你收集整理的java selector 源码_基于selector的源码分析和理解、思想和应用实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java script isblank_
- 下一篇: 哪个银行可以办门面抵押贷款