一、前言
在學習了ChannelHandler和ChannelPipeline的有關細節(jié)后,接著學習Netty的EventLoop和線程模型。
二、EventLoop和線程模型
2.1. 線程模型
線程池可通過緩存和復用已有線程來提高系統(tǒng)性能,基本的緩沖池模式可描述如下:
· 從池中空閑鏈表中選取線程,然后將其分配賦予給已提交的任務。
· 當線程完成工作時,該線程又返回至空閑鏈表,可再進行復用。
該模式如下圖所示。
池化和復用線程是針對每個任務都需要創(chuàng)建和銷毀線程的改進,但還是需要進行上下文切換,并且隨著線程數(shù)量的增加,其負擔也會增加。同時,在高并發(fā)下也會出現(xiàn)很多線程問題。
2.2. EventLoop接口
任何網(wǎng)絡框架的基本功能都是運行任務來處理在連接聲明周期中所發(fā)生的事件,相應的編程結構通常被稱為事件循環(huán)。事件循環(huán)的基本思想如下代碼所示,每個任務都是一個Runnable實例。
while (!terminated) { List<Runnable> readyEvents = blockUntilEventsReady(); for (Runnable ev: readyEvents) { ev.run(); } }
延伸閱讀
學習是年輕人改變自己的最好方式