• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      完成端口技術(shù)在物聯(lián)網(wǎng)信息系統(tǒng)中的應(yīng)用研究

      2020-12-04 15:14:11
      無(wú)線互聯(lián)科技 2020年15期
      關(guān)鍵詞:句柄內(nèi)核線程

      姜 立

      (遼寧軌道交通職業(yè)學(xué)院,遼寧 沈陽(yáng) 110023)

      在日常生活中,對(duì)于一個(gè)中等規(guī)模的應(yīng)用來(lái)說(shuō),同時(shí)達(dá)到千人以上在線的情況經(jīng)常發(fā)生,系統(tǒng)集群可以很好地解決這個(gè)問(wèn)題?,F(xiàn)實(shí)情況下,一些應(yīng)用不可能投入大量硬件設(shè)備,因?yàn)橛布O(shè)備價(jià)格高昂。如何能利用有限的系統(tǒng)資源,解決比較困難的部署問(wèn)題,成為計(jì)算機(jī)軟件行業(yè)研究的主要問(wèn)題。在設(shè)計(jì)過(guò)程中,如果采用一個(gè)用戶一個(gè)線程的設(shè)計(jì)方式那將造成CPU在成千上萬(wàn)的線程間進(jìn)行切換,后果不可想象,用戶多一點(diǎn)的時(shí)候完全解決不了問(wèn)題,甚至系統(tǒng)崩潰。而Windows系統(tǒng)為我們提供了一個(gè)強(qiáng)大的工具,那就是完成端口(IOCP)[1]。

      1 什么是IOCP

      重疊I/O(Overlapped I/O),完成端口(Completion Ports),Windows完成端口把完成端口看成需要系統(tǒng)維護(hù)的隊(duì)列,應(yīng)用調(diào)用系統(tǒng)接口,把重疊IO操作完成的事件放入隊(duì)列,用不同的CPU內(nèi)核處理的強(qiáng)大功能。

      2 采用IOCP的原因

      (1)很多現(xiàn)網(wǎng)應(yīng)用服務(wù)器采用的是Windows server系統(tǒng),Windows server系統(tǒng)有諸多優(yōu)點(diǎn)。而Windows IOCP就是Windows系統(tǒng)獨(dú)有的、系統(tǒng)自帶的強(qiáng)大功能,而其他系統(tǒng)要實(shí)現(xiàn)重疊IO功能,都需要應(yīng)用自身實(shí)現(xiàn),大大增加了開(kāi)發(fā)難度。

      (2)Windows IOCP完成端口技術(shù)則完全顛覆傳統(tǒng)設(shè)計(jì)模式,將并行的線程數(shù)量設(shè)計(jì)上限。目前IOCP完成端口是Windows下性能最好的I/O模型,同時(shí)它也是最復(fù)雜的內(nèi)核對(duì)象[2]。其避免了大量用戶并發(fā)時(shí)原有模型采用的方式,極大地提高了程序的并行處理能力。完成端口會(huì)充分利用Windows內(nèi)核來(lái)進(jìn)行I/O的調(diào)度,是C/S通信模式中性能最好的網(wǎng)絡(luò)通信模型。使用“同步”的方式操作會(huì)阻塞住來(lái)自同一個(gè)線程的任何其他操作,所以要設(shè)計(jì)出高性能的服務(wù)器程序,通信一定要是異步的。完成端口模型的初衷,是為了解決一個(gè)客戶端一個(gè)連接線程的巨大缺點(diǎn),充分利用內(nèi)核對(duì)象的調(diào)度,只使用少量的幾個(gè)線程來(lái)處理和客戶端的所有通信,消除了無(wú)謂的線程上下切換,最大限度地提高了網(wǎng)絡(luò)通信的性能。

      (3)提供長(zhǎng)連接、短連接,RPC級(jí)功能實(shí)現(xiàn)。

      3 IOCP原理分析

      所謂異步,區(qū)別于同步的地方就是同步可以理解為多個(gè)工作大家排對(duì)按順序一個(gè)接一個(gè)完成,所需要的時(shí)間是每個(gè)任務(wù)時(shí)間之和,異步操作則是大家同時(shí)開(kāi)始工作,所需要的時(shí)間就是子任務(wù)里邊時(shí)間最長(zhǎng)的。這樣就可以簡(jiǎn)單通俗地理解異步操作的性能優(yōu)勢(shì),Windows的IOCP就是異步操作的最完美實(shí)例。

      3.1 設(shè)備內(nèi)核對(duì)象信號(hào)

      Windows的IOCP負(fù)責(zé)任務(wù)的調(diào)度和完成通知。設(shè)備句柄為同步對(duì)象,有兩種信號(hào)狀態(tài):有或無(wú)。無(wú)信號(hào)狀態(tài):IO請(qǐng)求發(fā)送時(shí)處理時(shí);有信號(hào)狀態(tài):操作完成時(shí)??梢?jiàn),只有在任務(wù)完成時(shí)設(shè)備句柄信號(hào)才有有信號(hào)狀態(tài)。此時(shí)系統(tǒng)受信,系統(tǒng)通過(guò)Wait For Multiple Objects(或Wait For Single object)接口判斷操作是否完成[3]。

      3.2 事件內(nèi)核對(duì)象信號(hào)

      系統(tǒng)事件和IO操作一一對(duì)應(yīng),進(jìn)行綁定。系統(tǒng)通過(guò)事件處理API處理IO操作,由于事件API本身就是異步高效操作,和IO操作結(jié)合,很好地簡(jiǎn)化了操作流程。當(dāng)I/O操作完成后系統(tǒng)采用事件API通知綁定的IO句柄,事件授信,IO執(zhí)行操作完成。該技術(shù)解決了使一個(gè)設(shè)備內(nèi)核對(duì)象變?yōu)橛行盘?hào)技術(shù)中一個(gè)設(shè)備只能對(duì)應(yīng)一個(gè)操作的不足。

      4 應(yīng)用領(lǐng)域

      (1)大型多人在線游戲類(lèi)型游戲(MMO游戲),目前大型的MMO游戲都采用了IOCP完成端口,如《三國(guó)鼎立》《英雄遠(yuǎn)征》等。

      (2)大型IM(即時(shí)通訊、實(shí)時(shí)傳訊)系統(tǒng),IOCP提供長(zhǎng)連接、短連接,可以簡(jiǎn)單實(shí)現(xiàn)心跳機(jī)制,確保設(shè)備在線,應(yīng)對(duì)運(yùn)營(yíng)商連接清理機(jī)制。

      (3)企業(yè)ERP管理系統(tǒng)等等具有大量并發(fā)用戶請(qǐng)求的場(chǎng)合。

      (4)穩(wěn)定、高效的IOCP完成端口通信模型幾乎成為開(kāi)發(fā)這類(lèi)系統(tǒng)的基礎(chǔ)。

      5 系統(tǒng)實(shí)現(xiàn)

      5.1 系統(tǒng)設(shè)計(jì)

      系統(tǒng)采用C/S結(jié)構(gòu)設(shè)計(jì),主要分為登錄、用戶管理、信息管理、設(shè)備管理管理、設(shè)備控制等模塊。服務(wù)器端應(yīng)用完成端口技術(shù),客戶端采用普通的Socket連接方式。服務(wù)器端數(shù)據(jù)庫(kù)系統(tǒng)采用MySql。系統(tǒng)通過(guò)IOCP服務(wù)器來(lái)訪問(wèn)數(shù)據(jù)庫(kù)系統(tǒng),用戶通過(guò)客戶端軟件進(jìn)行Socket短連接到IOCP服務(wù)器,進(jìn)行數(shù)據(jù)操作[4]。

      5.2 完成端口實(shí)現(xiàn)關(guān)鍵技術(shù)

      (1)創(chuàng)建完成端口。

      HANDLE m_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);

      (2)根據(jù)系統(tǒng)中CPU核心的數(shù)量建立對(duì)應(yīng)的Worker線程。

      SYSTEM_INFO si;

      GetSystemInfo(&si) ;

      int m_nProcessors = si.dwNumberOfProcessors;

      m_phWorkerThreads[i] = ::CreateThread(0, 0, _WorkerThread, …) ;

      (3)創(chuàng)建用于監(jiān)聽(tīng)的Socket,綁定到完成端口上,然后開(kāi)始在指定的端口上監(jiān)聽(tīng)連接請(qǐng)求。

      SOCKET m_sockListen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);

      If(SOCKET_ERROR==bind(m_sockListen,(struct sockaddr*)&ServerAddress, sizeof(ServerAddress)));

      listen(m_sockListen,SOMAXCONN)) ;

      (4)在這個(gè)監(jiān)聽(tīng)Socket上投遞AcceptEx請(qǐng)求。

      GUID GuidAcceptEx = WSAID_ACCEPTEX; WSAIoctl(m_pListenContext->m_Socket, SIO_GET_EXTENSION_FUNCTION_POINTER, &GuidAcceptEx,sizeof(GuidAcceptEx), &m_lpfnAcceptEx, sizeof(m_lpfnAcceptEx) , &dwBytes, NULL,NULL) ;

      (5)Worker線程的工作。

      BOOL bReturn=GetQueuedCompletionStatus(pIOCPModel->m_hIOCompletionPort,

      (LPDWORD)&lpContext,&pOverlapped,INFINITE );

      (6)收到Accept通知時(shí)執(zhí)行_DoAccept。

      (7)當(dāng)收到Recv通知時(shí), _DoRecv。

      6 結(jié)語(yǔ)

      目前高性能異步IO技術(shù)已經(jīng)日趨成熟,各大頂尖技術(shù)公司和知名企業(yè)都有自己的實(shí)現(xiàn)機(jī)制和方法。當(dāng)前主流技術(shù)已經(jīng)在高性能異步IO技術(shù)上繼續(xù)演進(jìn)為微服務(wù)和云等,如阿里的Dubbo和apache的Spring Cloud等。但是Winows完成端口技術(shù)依然在特定環(huán)境為我們提供了一個(gè)可行的免費(fèi)的解決方案,而且實(shí)現(xiàn)代價(jià)低,一臺(tái)普通的PC電腦便可以發(fā)揮出類(lèi)似服務(wù)器的功能,可以承接大部分小型應(yīng)用,因此目前仍然有很多技術(shù)人員熱衷于Winows完成端口技術(shù)的研究和開(kāi)發(fā)。

      猜你喜歡
      句柄內(nèi)核線程
      萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      高校圖書(shū)館持久標(biāo)識(shí)符應(yīng)用研究
      編譯程序語(yǔ)法分析句柄問(wèn)題分析與探討
      淺談linux多線程協(xié)作
      MFC應(yīng)用程序多線程混合顯示界面方法研究
      基于SPY++的軟件功能擴(kuò)展的研究
      Linux線程實(shí)現(xiàn)技術(shù)研究
      临汾市| 灵璧县| 临夏市| 普陀区| 鹿泉市| 仙桃市| 虹口区| 如皋市| 岳池县| 嘉黎县| 通州市| 和林格尔县| 旺苍县| 白城市| 夏津县| 图片| 隆尧县| 大庆市| 涡阳县| 尤溪县| 东丰县| 黄浦区| 龙海市| 丰台区| 敖汉旗| 达拉特旗| 长宁县| 上思县| 斗六市| 遵化市| 穆棱市| 无极县| 岳普湖县| 建阳市| 金塔县| 铜鼓县| 永州市| 达尔| 齐齐哈尔市| 霍林郭勒市| 罗城|