一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

MINA2.0線程_筆記

 Bandari_Sky15 2015-04-21
1.線程
使用線程,線程池可以提高性能,MINA中使用的線程如下:
  IoAcceptor/IoConnector線程
        IoProcessor線程
        IoHandler線程

1.1 IoAcceptor/IoConnector線程
IoAcceptor 用于監(jiān)聽客戶端的連接,每監(jiān)聽一個(gè)端口建立一個(gè)線程。IoConnector用于與服務(wù)器端建立連接,每連接一個(gè)服務(wù)器就建立一個(gè)線程。這倆個(gè)線程都是通過(guò)線程池建立的,我們可以在構(gòu)造對(duì)象的時(shí)候就指定線程池類型。
默認(rèn)的線程池類型為:newCachedThreadPool,這是一個(gè)根據(jù)需要?jiǎng)?chuàng)建線程的線程池,在以前構(gòu)造的線程可用時(shí)可以重用它們。

1.2 IoProcessor線程
對(duì)于一個(gè)IoAcceptor或IoConnector線程對(duì)應(yīng)一個(gè)IoProcessor線程用于IO的處理,這個(gè)IoProcessor線程從IoProcessor線程池中取出。IoProcessor線程池的大小默認(rèn)為機(jī)器的CPU核數(shù)+1,例如雙核機(jī)器的IoProcessor的線程池大小默認(rèn)為3,我們可以更改線程池的大?。?nbsp;

  1. IoConnector connector = new NioSocketConnector(9);  
  2. IoAcceptor acceptor = new NioSocketAcceptor(9);  

1.3 IoHandler線程
當(dāng)我們?cè)谶^(guò)濾器鏈中沒(méi)有添加“threadPool”過(guò)濾器,則業(yè)務(wù)邏輯處理和IoProcessor使用同一個(gè)線程。如果設(shè)置了“threadPool”過(guò)濾器,則使用設(shè)置的線程池產(chǎn)生線程進(jìn)行業(yè)務(wù)邏輯處理,過(guò)濾器的配置如下:
  1. acceptor.getFilterChain().addLast("threadPool"new ExecutorFilter(Executors.newCachedThreadPool()));  
如上配置之后,IO處理和業(yè)務(wù)邏輯處理將會(huì)使用各自的線程池產(chǎn)生線程使用。如果你的應(yīng)用每次處理請(qǐng)求的時(shí)間較長(zhǎng)而又希望應(yīng)用能夠有較好的響應(yīng)性,那么最好是把處理業(yè)務(wù)邏輯的任務(wù)放到一個(gè)新的線程中去執(zhí)行,而不是在 mina 框架創(chuàng)建的線程中去執(zhí)行。 

1.4 各種線程的產(chǎn)生
  • 當(dāng) IoAcceptor/IoConnector實(shí)例創(chuàng)建的時(shí)候,同時(shí)一個(gè)關(guān)聯(lián)在IoAcceptor/IoConnector上的IoProcessor線程池也被創(chuàng)建。
  • 當(dāng)IoAcceptor/IoConnector建立套接字(IoAcceptor 的bind()或者是IoConnector 的connect()方法被調(diào)用)時(shí),從線程池中取出一個(gè)線程,監(jiān)聽套接字端口。
  • 當(dāng) IoAcceptor/IoConnector監(jiān)聽到套接字上有連接請(qǐng)求時(shí),建立IoSession 對(duì)象,從IoProcessor池中取出一個(gè)IoProcessor線程執(zhí)行IO處理。
  • 如若過(guò)濾器中配置了“threadPool”過(guò)濾器,則使用此線程池建立線程執(zhí)行業(yè)務(wù)邏輯(IoHandler)處理,否則使用IoProcessor線程處理業(yè)務(wù)邏輯。
  1. public class MinaTest {  
  2.     protected static Logger logger = LoggerFactory.getLogger(MinaTest.class);  
  3.     private static int PORT = 9999;  
  4.   
  5.     public static void main(String[] args) {  
  6.         try {  
  7.             // 創(chuàng)建一個(gè)非阻塞的server端的Socket  
  8.             IoAcceptor acceptor = new NioSocketAcceptor();  
  9.             // 設(shè)置過(guò)濾器  
  10.             acceptor.getFilterChain().addLast("logger"new LoggingFilter());  
  11.             acceptor.getFilterChain().addLast("codec",  
  12.                     new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));  
  13.             acceptor.getFilterChain().addLast("threadPool"new ExecutorFilter(Executors.newCachedThreadPool()));  
  14.             // 設(shè)置讀取數(shù)據(jù)的緩沖區(qū)大小  
  15.             acceptor.getSessionConfig().setReadBufferSize(2048);  
  16.             // 讀寫通道10秒內(nèi)無(wú)操作進(jìn)入空閑狀態(tài)  
  17.             acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);  
  18.             // 綁定邏輯處理器  
  19.             acceptor.setHandler(new MinaServerHandler());  
  20.             // 綁定端口  
  21.             acceptor.bind(new InetSocketAddress(PORT));  
  22.             logger.info("服務(wù)端啟動(dòng)成功... 端口號(hào)為:" + PORT);  
  23.         } catch (Exception e) {  
  24.             logger.error("服務(wù)端啟動(dòng)異常....", e);  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  
  28. }
      
  1. public class MinaServerHandler extends IoHandlerAdapter {  
  2.     protected static Logger logger = LoggerFactory.getLogger(MinaServerHandler.class);  
  3.   
  4.     public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
  5.         logger.error("服務(wù)端發(fā)送異常...", cause);  
  6.     }  
  7.   
  8.     public void messageReceived(IoSession session, Object message) throws Exception {  
  9.         String msg = message.toString();  
  10.         //如果是quit就關(guān)閉session退出    
  11.         if ("quit".equals(msg)) {  
  12.             session.close();  
  13.         }  
  14.         Date date = new Date();  
  15.         session.write(date.toString());  
  16.     }  
  17.   
  18.     public void sessionCreated(IoSession session) throws Exception {  
  19.         logger.info("服務(wù)端與客戶端創(chuàng)建連接...");  
  20.     }  
  21. }  
  • NioSccketAcceptor為服務(wù)器端監(jiān)聽端口9999通過(guò)線程池創(chuàng)建的一個(gè)線程。
  • NioProcessor-1、NioProcessor-2、NioProcessor-3為IoProcessor線程池創(chuàng)建的線程,用來(lái)IO處理。
  • pool-3-thread-1、pool-3-thread-2、pool-3-thread-3為過(guò)濾器配置的線程池創(chuàng)建的線程,用來(lái)業(yè)務(wù)邏輯處理。

    本站是提供個(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)論公約

    類似文章 更多

    狠狠亚洲丁香综合久久| 青草草在线视频免费视频| 中国少妇精品偷拍视频| 草草草草在线观看视频| 大香蕉再在线大香蕉再在线| 这里只有九九热精品视频| 九九热这里有精品20| 91人妻人人揉人人澡人| 在线免费国产一区二区| 国产原创中文av在线播放| 久久99热成人网不卡| 日韩欧美黄色一级视频| 亚洲欧洲一区二区中文字幕 | 国产又粗又猛又长又大| 中国少妇精品偷拍视频| 中文字幕久热精品视频在线| 亚洲一级在线免费观看| 欧美日韩精品一区二区三区不卡| 亚洲欧美日韩精品永久| 高清一区二区三区大伊香蕉| 麻豆蜜桃星空传媒在线观看| 成年午夜在线免费视频| 九九热最新视频免费观看| 国产免费一区二区三区av大片| 自拍偷拍一区二区三区| 中文字幕禁断介一区二区| 亚洲国产色婷婷久久精品| 91人妻丝袜一区二区三区| 日系韩系还是欧美久久| 伊人网免费在线观看高清版| 五月天丁香亚洲综合网| 三级理论午夜福利在线看| 欧美日韩在线观看自拍| 亚洲国产av在线视频| 亚洲少妇人妻一区二区| 中文字幕禁断介一区二区| 日韩一级毛一欧美一级乱| 欧美日韩在线观看自拍| 亚洲中文字幕在线观看四区| 五月婷婷综合缴情六月| 东京热一二三区在线免|