基于多核編程的案例分析學(xué)習(xí)教案_第1頁(yè)
基于多核編程的案例分析學(xué)習(xí)教案_第2頁(yè)
基于多核編程的案例分析學(xué)習(xí)教案_第3頁(yè)
基于多核編程的案例分析學(xué)習(xí)教案_第4頁(yè)
基于多核編程的案例分析學(xué)習(xí)教案_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、會(huì)計(jì)學(xué)1基于多核編程的案例基于多核編程的案例(n l)分析分析第一頁(yè),共36頁(yè)。第1頁(yè)/共35頁(yè)第二頁(yè),共36頁(yè)??梢詮恼n程(kchng)網(wǎng)站上下載源代碼第2頁(yè)/共35頁(yè)第三頁(yè),共36頁(yè)。using System.Net.Sockets; /namespaceTcpListener listener = new TcpListener(portNum);listener.Start();TcpClient handler = listener.AcceptTcpClient();int i = ClientSockets.Add ( new ClientHandler(handler) ) ;

2、 (ClientHandler) ClientSocketsi).Start() ;客戶端Socket處理線程客戶端連接實(shí)例集監(jiān)聽(tīng)線程回收線程為每個(gè)已經(jīng)接收的連接產(chǎn)生一個(gè)線程TCP客戶端請(qǐng)求垃圾線程將被回收允許(ynx)TCP服務(wù)接收客戶端的連接請(qǐng)求。分別(fnbi)為每個(gè)請(qǐng)求產(chǎn)生一個(gè)線程實(shí)例。并啟動(dòng)。第3頁(yè)/共35頁(yè)第四頁(yè),共36頁(yè)。private static ArrayList ClientSockets ;lock ( ClientSockets.SyncRoot ) int i = ClientSockets.Add ( new ClientHandler(handler) ) ;

3、(ClientHandler) ClientSocketsi).Start() ;線程同步(tngb)第4頁(yè)/共35頁(yè)第五頁(yè),共36頁(yè)。第5頁(yè)/共35頁(yè)第六頁(yè),共36頁(yè)。ThreadReclaim = new Thread( new ThreadStart(Reclaim) );ThreadReclaim.Start() ;private static void Reclaim() while (ContinueReclaim) lock( ClientSockets.SyncRoot ) for ( int x = ClientSockets.Count-1 ; x = 0 ; x- ) O

4、bject Client = ClientSocketsx ; if ( !( ( ClientHandler ) Client ).Alive ) ClientSockets.Remove( Client ) ; Console.WriteLine(A client left) ; Thread.Sleep(200) ; 第6頁(yè)/共35頁(yè)第七頁(yè),共36頁(yè)。ContinueReclaim = false ; ThreadReclaim.Join() ; foreach ( Object Client in ClientSockets ) ( (ClientHandler) Client ).S

5、top() ; 第7頁(yè)/共35頁(yè)第八頁(yè),共36頁(yè)。第8頁(yè)/共35頁(yè)第九頁(yè),共36頁(yè)。 / Schedule task again if ( SharedStateObj.ContinueProcess & !bQuit ) ThreadPool.QueueUserWorkItem(new WaitCallback(this.Process), SharedStateObj);else networkStream.Close(); ClientSocket.Close(); / Deduct no. of clients by one Interlocked.Decrement(ref

6、SharedStateObj.NumberOfClients ); Console.WriteLine(A client left, number of connections is 0, SharedStateObj.NumberOfClients) ; / Signal main process if this is the last client connections / main thread requested to stop.if ( !SharedStateObj.ContinueProcess & SharedStateObj.NumberOfClients = 0

7、) SharedStateObj.Ev.Set();第9頁(yè)/共35頁(yè)第十頁(yè),共36頁(yè)。任務(wù)處理任務(wù)處理任務(wù)處理FIFO隊(duì)列結(jié)構(gòu)客戶端請(qǐng)求任務(wù)監(jiān)聽(tīng)線程當(dāng)客戶端請(qǐng)求到達(dá),將請(qǐng)求放到隊(duì)列中。class ClientConnectionPool / Creates a synchronized wrapper around the Queue. private Queue SyncdQ = Queue.Synchronized( new Queue() );第10頁(yè)/共35頁(yè)第十一頁(yè),共36頁(yè)。class ClientService const int NUM_OF_THREAD = 10; priv

8、ate ClientConnectionPool ConnectionPool ; private bool ContinueProcess = false ; private Thread ThreadTask = new ThreadNUM_OF_THREAD ; public ClientService(ClientConnectionPool ConnectionPool) this .ConnectionPool = ConnectionPool ; public void Start() ContinueProcess = true ; / Start threads to han

9、dle Client Task for ( int i = 0 ; i 0 ) client = ConnectionPool.Dequeue() ; if ( client != null ) client.Process() ; / Provoke client / if client still connect, schedufor later processingle it if ( client.Alive ) ConnectionPool.Enqueue(client) ; Thread.Sleep(100) ; 第11頁(yè)/共35頁(yè)第十二頁(yè),共36頁(yè)。第12頁(yè)/共35頁(yè)第十三頁(yè),共

10、36頁(yè)。第13頁(yè)/共35頁(yè)第十四頁(yè),共36頁(yè)。第14頁(yè)/共35頁(yè)第十五頁(yè),共36頁(yè)。第15頁(yè)/共35頁(yè)第十六頁(yè),共36頁(yè)。第16頁(yè)/共35頁(yè)第十七頁(yè),共36頁(yè)。第17頁(yè)/共35頁(yè)第十八頁(yè),共36頁(yè)。第18頁(yè)/共35頁(yè)第十九頁(yè),共36頁(yè)。第19頁(yè)/共35頁(yè)第二十頁(yè),共36頁(yè)。服務(wù)器端程序界面第20頁(yè)/共35頁(yè)第二十一頁(yè),共36頁(yè)。第21頁(yè)/共35頁(yè)第二十二頁(yè),共36頁(yè)。主線程:管理程序狀態(tài)數(shù)據(jù)包包頭重新封裝。(傳輸速度會(huì)受影響,但是質(zhì)量得到了保證。否則(fuz)在傳圖片時(shí)會(huì)出現(xiàn)缺失、移位等現(xiàn)象)任務(wù)線程:發(fā)送線程接收線程顯示進(jìn)度條的線程采用臨界段進(jìn)行同步處理第22頁(yè)/共35頁(yè)第二十三頁(yè),共36頁(yè)

11、。CTCPClient_CE:CTCPClient_CE() /初始化socket環(huán)境(hunjng) WSADATA wsd; WSAStartup(MAKEWORD(1,1),&wsd); /創(chuàng)建線程退出事件句柄 m_exitThreadEvent = CreateEvent(NULL,FALSE,FALSE,NULL); m_bRec = true;第23頁(yè)/共35頁(yè)第二十四頁(yè),共36頁(yè)。/*-【函數(shù)介紹】: 用于打開(kāi)客戶端socket【入口參數(shù)】: pWnd用于指定父窗口句柄【出口參數(shù)】: (無(wú))【返回 值】: TRUE:打開(kāi)成功;FALSE:打開(kāi)失敗-*/BOOL CTCPC

12、lient_CE:Open(CWnd * pWnd) /復(fù)位線程退出事件(shjin) ResetEvent(m_exitThreadEvent); /存儲(chǔ)父窗口句柄 m_pOwnerWnd = pWnd; /創(chuàng)建TCP套接字 m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(m_socket = SOCKET_ERROR);return FALSE; /創(chuàng)建通訊線程 m_tcpThreadHandle = CreateThread(NULL,0,SocketThreadFunc,this,0,NULL); if (m_tcpThre

13、adHandle = NULL) closesocket(m_socket); return FALSE; return TRUE;第24頁(yè)/共35頁(yè)第二十五頁(yè),共36頁(yè)。第25頁(yè)/共35頁(yè)第二十六頁(yè),共36頁(yè)。第26頁(yè)/共35頁(yè)第二十七頁(yè),共36頁(yè)。第27頁(yè)/共35頁(yè)第二十八頁(yè),共36頁(yè)。第28頁(yè)/共35頁(yè)第二十九頁(yè),共36頁(yè)。第29頁(yè)/共35頁(yè)第三十頁(yè),共36頁(yè)。第30頁(yè)/共35頁(yè)第三十一頁(yè),共36頁(yè)。第31頁(yè)/共35頁(yè)第三十二頁(yè),共36頁(yè)。第32頁(yè)/共35頁(yè)第三十三頁(yè),共36頁(yè)。第33頁(yè)/共35頁(yè)第三十四頁(yè),共36頁(yè)。第34頁(yè)/共35頁(yè)第三十五頁(yè),共36頁(yè)。NoImage內(nèi)容(nirng)總

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論