一、前言

  在學(xué)習(xí)了ChannelHandler和ChannelPipeline的有關(guān)細(xì)節(jié)后,接著學(xué)習(xí)Netty的EventLoop和線程模型。

二、EventLoop和線程模型

  2.1. 線程模型

  線程池可通過緩存和復(fù)用已有線程來提高系統(tǒng)性能,基本的緩沖池模式可描述如下:

    · 從池中空閑鏈表中選取線程,然后將其分配賦予給已提交的任務(wù)。

    · 當(dāng)線程完成工作時,該線程又返回至空閑鏈表,可再進(jìn)行復(fù)用。

  該模式如下圖所示。

  photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

  池化和復(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í)例。  

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

while (!terminated) {
    List<Runnable> readyEvents = blockUntilEventsReady();    for (Runnable ev: readyEvents) {
        ev.run();
    }
}

網(wǎng)友評論