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