Netty中的線程處理EventLoop

Netty是用什麼來處理線程的?編程

通常線程池化模式爲安全

  • 從池的空閒任務列表中選擇一個Thread,指派它取運行一個已提交的任務
  • 任務完成時,該Thread返回給該列表,使其能夠重用

運行任務處理的在編程上的構造一般稱做事件循環,Netty使用EventLoop來描述。一個EventLoop將由一個永遠不會變的Thread驅動,它能夠被指派給多個channel,任務提交給Eventloop以後能夠當即執行或者調度執行。任務的執行順序是以先進先出的順序執行。異步

Netty是用什麼作任務調度的?

jdk在concurrent包中的ScheduledExecutorService來執行調度,它做爲線程管理的一部分,會有額外的線程建立,可是當有大量的任務被緊湊的調度的時候,這有可能成爲瓶頸,EventLoop繼承了它,並且任務調度不存在這個問題。oop

要實現延遲執行,只需調用schedule方法便可,要間隔一段時間,每次執行,則調用scheduledAtFixedRate,想要取消調度則是經過返回的scheduledFuture調用cancel線程

EventLoop的執行邏輯是怎樣的?


獲取當前的執行線程以後,判斷是否是分配給eventLoop的線程,若是是就直接執行,不然放到隊列裏面稍後執行,這中模式就是Netty線程模式的卓越性,不用關心線程安全和同步相關問題cdn

異步傳輸和同步傳輸對eventLoop來說線程分配有什麼不一樣?

異步傳輸用的是少許的eventloop,以及與之對應分配的Thread,經過一個線程來支撐多個channel(以此來實現少許線程支撐大量的channel),同步傳輸則是每一個channel一個線程blog

相關文章
相關標籤/搜索