Netty是用什麼來處理線程的?編程
通常線程池化模式爲安全
運行任務處理的在編程上的構造一般稱做事件循環,Netty使用EventLoop來描述。一個EventLoop將由一個永遠不會變的Thread驅動,它能夠被指派給多個channel,任務提交給Eventloop以後能夠當即執行或者調度執行。任務的執行順序是以先進先出的順序執行。異步
jdk在concurrent包中的ScheduledExecutorService來執行調度,它做爲線程管理的一部分,會有額外的線程建立,可是當有大量的任務被緊湊的調度的時候,這有可能成爲瓶頸,EventLoop繼承了它,並且任務調度不存在這個問題。oop
要實現延遲執行,只需調用schedule方法便可,要間隔一段時間,每次執行,則調用scheduledAtFixedRate,想要取消調度則是經過返回的scheduledFuture調用cancel線程
獲取當前的執行線程以後,判斷是否是分配給eventLoop的線程,若是是就直接執行,不然放到隊列裏面稍後執行,這中模式就是Netty線程模式的卓越性,不用關心線程安全和同步相關問題cdn
異步傳輸用的是少許的eventloop,以及與之對應分配的Thread,經過一個線程來支撐多個channel(以此來實現少許線程支撐大量的channel),同步傳輸則是每一個channel一個線程blog