完成端口技術在學生管理系統(tǒng)中的應用_第1頁
已閱讀1頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  完成端口技術在學生管理系統(tǒng)中的應用</p><p><b>  【摘要】 </b></p><p>  當前,各大學、學院都非常重視學生管理工作,以學生為根本的教育理念已經(jīng)漸漸成為教育界的廣泛同識。學生管理系統(tǒng)解決了學生管理工作繁瑣、量大、雜亂的問題。在設計和開發(fā)管理系統(tǒng)的時候如何解決大規(guī)模并發(fā)問題成為一個難點,而Windows完成端口技術(IO

2、CP)為此問題提供了很好的解決方案。 </p><p><b>  【關鍵詞】 </b></p><p>  學生管理;系統(tǒng);完成端口;IOCP;重疊IO </p><p>  學生管理系統(tǒng)大多采用C/S結(jié)構(gòu)設計模式。在日常生活中,對于一個中等規(guī)模的學院來說,同時達到千人以上在線的情況經(jīng)常發(fā)生,如果采用一個用戶一個線程的設計方式那將造成CPU在

3、這成千上萬的線程間進行切換,后果不可想象。Windows IOCP完成端口技術則完全顛覆傳統(tǒng)設計模式,它在將并行的線程數(shù)量設計上限。目前,IOCP完成端口是Windows下性能最好的I/O模型,同時它也是最復雜的內(nèi)核對象。它避免了大量用戶并發(fā)時原有模型采用的方式,極大的提高了程序的并行處理能力。 </p><p><b>  1系統(tǒng)設計 </b></p><p>  

4、系統(tǒng)采用B/S結(jié)構(gòu)設計,主要分為登錄、用戶管理、信息管理、學生處分管理、評分管理等大模塊。服務器端應用完成端口技術,客戶端采用普通的Socket連接方式。服務器端數(shù)據(jù)庫系統(tǒng)采用Sqlserver2000。系統(tǒng)通過IOCP服務器來訪問數(shù)據(jù)庫系統(tǒng),用戶通過客戶端軟件進行Socket短連接到IOCP服務器,進行數(shù)據(jù)操作。系統(tǒng)結(jié)構(gòu)圖如圖1所示。 </p><p><b>  圖1系統(tǒng)結(jié)構(gòu)圖 </b>

5、</p><p>  2完成端口技術的應用 </p><p>  2.1完成端口的優(yōu)點 </p><p>  完成端口會充分利用Windows內(nèi)核來進行I/O的調(diào)度,是C/S通信模式中性能最好的網(wǎng)絡通信模型。使用“同步”的方式操作會阻塞住來自同一個線程的任何其他操作,所以要寫高性能的服務器程序,通信一定要是異步的。微軟提出完成端口模型的初衷,就是為了解決這種“one

6、threadperclient”的缺點的,它充分利用內(nèi)核對象的調(diào)度,只使用少量的幾個線程來處理和客戶端的所有通信,消除了無謂的線程上下文切換,最大限度的提高了網(wǎng)絡通信的性能。 </p><p>  2.2使用完成端口的流程 </p><p> ?。?)調(diào)用CreateIoCompletionPort函數(shù)創(chuàng)建完成端口,將返回句柄保存。 </p><p> ?。?)根據(jù)

7、系統(tǒng)中處理器個數(shù),創(chuàng)建工作者(Worker)線程,用來處理和客戶端的通信請求。Worker線程個數(shù):N=2*處理器個數(shù)+2。 </p><p> ?。?)接收Socket連接,兩種實現(xiàn)方式:一是啟動一個獨立的線程,專門用來accept接收客戶端的連接請求;二是用性能優(yōu)異的異步AcceptEx請求。 </p><p>  (4)當客戶端連入,調(diào)用CreateIoCompletionPort函

8、數(shù),這里不用新建完成端口,而是把新連入的socket(前面創(chuàng)建設備句柄),與1)完成端口綁定在一起。至此,完成端口的相關部署工作完成。 </p><p>  (5)客戶端接入后,在這個Socket上提交一個網(wǎng)絡請求,WSARecv負責處理請求,執(zhí)行接收數(shù)據(jù)的操作。 </p><p> ?。?)此時,其它幾個Worker線程分別執(zhí)行4、5步操作。 </p><p>&

9、lt;b>  2.3系統(tǒng)實現(xiàn) </b></p><p> ?。?)創(chuàng)建完成端口 </p><p>  HANDLE m_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); </p><p> ?。?)根據(jù)系統(tǒng)中CPU核心的數(shù)量建立對應的Worke

10、r線程 </p><p>  SYSTEM_INFO si; </p><p>  GetSystemInfo(&si) ; </p><p>  int m_nProcessors = si.dwNumberOfProcessors; </p><p>  m_phWorkerThreads[i] = ::CreateThread(

11、0, 0, _WorkerThread, …) ; </p><p> ?。?)創(chuàng)建用于監(jiān)聽的Socket,綁定到完成端口上,然后開始在指定的端口上監(jiān)聽連接請求 </p><p>  SOCKET m_sockListen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); </p><

12、p>  If(SOCKET_ERROR==bind(m_sockListen,(struct sockaddr*)&ServerAddress, sizeof(ServerAddress))); </p><p>  listen(m_sockListen,SOMAXCONN)) ; </p><p> ?。?)在這個監(jiān)聽Socket上投遞AcceptEx請求 </p&

13、gt;<p>  GUID GuidAcceptEx = WSAID_ACCEPTEX; WSAIoctl(m_pListenContext>m_Socket, SIO_GET_EXTENSI ON_FUNCTION_POINTER, &GuidAcceptEx,sizeof(GuidAcceptEx), &m_lpfnAcceptEx, sizeof(m_lpfnAcceptEx) , &d

14、wBytes, NULL,NULL) ; </p><p> ?。?)Worker線程的工作 </p><p>  BOOL bReturn = GetQueuedCompletionStatus(pIOCPModel>m_hIOCompletionPort, </p><p> ?。↙PDWORD)&lpContext,&pOverlappe

15、d,INFINITE ); </p><p> ?。?)收到Accept通知時執(zhí)行_DoAccept </p><p> ?。?)當收到Recv通知時, _DoRecv </p><p><b>  3界面展示 </b></p><p>  3.1用戶登錄頁面(圖2) </p><p><b

16、>  圖2登陸界面 </b></p><p>  3.2系統(tǒng)主界面(圖3) </p><p><b>  圖3系統(tǒng)主界面 </b></p><p><b>  參考文獻: </b></p><p>  [1]郭峰.深入淺出設計模式.北京:中國鐵道出版社,2013 </p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論