乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      mina 中的線程 - window07 - 博客園

       ch328 2010-09-21

      mina 中的線程

      在 mina簡(jiǎn)介 中提到,mina 是一個(gè)多線程的框架,本文就來(lái)看看 mina 中線程的使用。mina 中都是使用 java.util.concurrent.Executor 來(lái)使用線程的。

      注意: 本文中所討論的 mina 中的線程是針對(duì)基于 socket 的應(yīng)用程序的,也就是說(shuō)使用 SocketAcceptor 的程序,另外兩種 IoAcceptor 的實(shí)現(xiàn)中對(duì)線程的使用可能相同,也可能不同,我并沒(méi)有對(duì)它們做過(guò)多的研究。

      在基于 SocketAcceptor 的應(yīng)用程序中,運(yùn)行過(guò)程中 mina 框架本身會(huì)有兩種類型的線程在運(yùn)行,一種是在 SocketAcceptor 中創(chuàng)建的用于監(jiān)聽(tīng)并接收來(lái)自客戶端請(qǐng)求的線程,還有一類線程是處理客戶端與服務(wù)器端 I/O 的線程。

      當(dāng)調(diào)用 SocketAcceptor 的 bind 方法時(shí),默認(rèn)會(huì)創(chuàng)建一個(gè)名稱前綴為 SocketAcceptor 的線程,該線程負(fù)責(zé)監(jiān)聽(tīng)來(lái)自客戶端的請(qǐng)求,如果接收到客戶端的請(qǐng)求,它僅僅是為處理這個(gè)請(qǐng)求做好準(zhǔn)備,而把具體處理請(qǐng)求以及 I/O 的任務(wù)代理給 SocketIoProcessor,讓它去處理請(qǐng)求。這個(gè)準(zhǔn)備過(guò)程主要是為接受到的請(qǐng)求創(chuàng)建一個(gè)  IoSession,并構(gòu)建出 IoFilter 鏈,然后把準(zhǔn)備好的數(shù)據(jù)以及來(lái)自客戶端的請(qǐng)求交給 SocketIoProcessor 處理。通常 這類線程會(huì)針對(duì)每一次的 bind 調(diào)用創(chuàng)建一個(gè)新的線程。

      請(qǐng)注意 前一節(jié)中的“通常 ” 二字,使用這兩個(gè)字說(shuō)明上述的行為不是絕對(duì)的。的確這不是絕對(duì)的,這取決于 SocketAcceptor 的字段 executor 的實(shí)現(xiàn),可以通過(guò)構(gòu)造方法來(lái)設(shè)置字段 executor 的值,executor 字段的類型為 java.util.concurrent.Executor。mina 默認(rèn)是用 org.apache.mina.util.NewThreadExecutor,它會(huì)為每一個(gè)提交的任務(wù)創(chuàng)建一個(gè)新的線程。因?yàn)樵?bind 方法中它會(huì)把實(shí)現(xiàn)監(jiān)聽(tīng)客戶端請(qǐng)求任務(wù)的 Runnable 提交到 executor 中去執(zhí)行。注意千萬(wàn)不要使用一個(gè)不創(chuàng)建新線程而是在原線程中執(zhí)行的 Executor,這會(huì)使程序無(wú)法監(jiān)聽(tīng)客戶端的請(qǐng)求,因?yàn)槌绦蛑械奈ㄒ痪€程會(huì)被 Selector.get() 方法所阻塞,詳情可以查看 SocketAcceptor 類的源代碼。

      當(dāng) SocketAcceptor 收到了來(lái)自客戶端的請(qǐng)求,它就會(huì)把此請(qǐng)求丟給 SocketIoProcessor 去處理,這會(huì)創(chuàng)建名稱以 SocketAcceptorIoProcessor 為前綴的線程,mina 框架在這類線程中處理 I/O 發(fā)布并處理事件。這一類線程的數(shù)量可以通過(guò) SocketAcceptor 的構(gòu)造函數(shù)來(lái)設(shè)置。具體的值可以根據(jù)應(yīng)用的具體需求來(lái)決定。

      上述的兩類線程是 mina 框架本身所創(chuàng)建的,如果你的應(yīng)用每次處理請(qǐng)求的時(shí)間較長(zhǎng)而又希望應(yīng)用能夠有較好的響應(yīng)性,那么最好是把處理業(yè)務(wù)邏輯的任務(wù)放到一個(gè)新的線程中去執(zhí)行,而不是在 mina 框架創(chuàng)建的線程中去執(zhí)行。

      mina 框架本身提供了一個(gè)過(guò)濾器 ExecutorFilter 來(lái)完成這樣的任務(wù),它會(huì)把在此之后的過(guò)濾器以及 IoHandler 中處理業(yè)務(wù)邏輯的代碼放到一個(gè)新的線程中去執(zhí)行。當(dāng) mina 框架中的第二類線程執(zhí)行完此過(guò)濾器后就會(huì)立即返回,可以用于處理新的請(qǐng)求。如果不想使用此過(guò)濾器,還可以設(shè)置 mina 的線程模型來(lái)達(dá)到相同的效果,其實(shí)線程模型也是使用 ExecutorFilter 實(shí)現(xiàn)的。但需要注意的是,在 mina 2.0 版本中已經(jīng)廢棄了線程模型。

      mina 框架中具體的如何使用線程可以查看它的源代碼,本文只是一個(gè)簡(jiǎn)單地介紹,在 mina 網(wǎng)站的文檔中也有一份針對(duì) mina 1.x 版本中的線程模型的說(shuō)明,請(qǐng)參見(jiàn) http://mina./configuring-thread-model.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多