基于多核编程案例分析

基于多核编程案例分析

ID:27407488

大小:211.50 KB

页数:35页

时间:2018-12-02

基于多核编程案例分析_第1页
基于多核编程案例分析_第2页
基于多核编程案例分析_第3页
基于多核编程案例分析_第4页
基于多核编程案例分析_第5页
资源描述:

《基于多核编程案例分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于多核编程的案例分析多核架构及编程技术基于多核编程的案例分析.NET环境下,多线程TCP服务案例C/S模式下多媒体socket通信(MFC)(PC-EmbeddedPlatform).NET环境下,多线程TCP服务多线程客户端连接处理对多个客户端连接采用线程安全收集对象进行集中管理。回收垃圾线程工具:Microsoft.NETFrameworkSDKC#C#Complier包含文件:TcpServer.csTcpServer2.csTcpServer2b.csTcpServer3.csTcpClientTest.cs可以从课程网站上下载源代码TCP类usingSyste

2、m.Net.Sockets;//namespaceTcpListenerlistener=newTcpListener(portNum);listener.Start();TcpClienthandler=listener.AcceptTcpClient();inti=ClientSockets.Add(newClientHandler(handler));((ClientHandler)ClientSockets[i]).Start();客户端Socket处理线程客户端连接实例集监听线程回收线程为每个已经接收的连接产生一个线程TCP客户端请求垃圾线程将被回收允许TCP服

3、务接收客户端的连接请求。分别为每个请求产生一个线程实例。并启动。线程安全收集关于管理客户端连接,特别是在主TCP线程结束之前,回收垃圾线程的时候,用ArrayList作为线程安全的收集器。privatestaticArrayListClientSockets;lock(ClientSockets.SyncRoot){inti=ClientSockets.Add(newClientHandler(handler));((ClientHandler)ClientSockets[i]).Start();}线程同步垃圾线程回收在典型的TCP服务环境中,许多客户端向服务端向服务器发

4、起连接。而许多客户端同时会断了连接,此时这些断了的连接还占有服务器端系统资源,应该被释放掉。如果没有回收策略的话,服务器将很快超载。垃圾线程需要回收。回收同时,需要注意线程同步。垃圾线程回收方法ThreadReclaim=newThread(newThreadStart(Reclaim));ThreadReclaim.Start();privatestaticvoidReclaim(){while(ContinueReclaim){lock(ClientSockets.SyncRoot){for(intx=ClientSockets.Count-1;x>=0;x--){O

5、bjectClient=ClientSockets[x];if(!((ClientHandler)Client).Alive){ClientSockets.Remove(Client);Console.WriteLine("Aclientleft");}}}Thread.Sleep(200);}}安全关闭服务在关闭服务之前,应该把所有的连接都关闭掉。ContinueReclaim=false;ThreadReclaim.Join();foreach(ObjectClientinClientSockets){((ClientHandler)Client).Stop();}线

6、程池当客户端的连接多了以后,会严重影响系统性能。线程池的利用可以有效管理所产生的这些线程。减小开销,增加性能。在线程池中将任务重新分配。线程池中线程数量有限制即使没有限制,线程过多,也会使CPU负载过大而死机。//Scheduletaskagainif(SharedStateObj.ContinueProcess&&!bQuit)ThreadPool.QueueUserWorkItem(newWaitCallback(this.Process),SharedStateObj);else{networkStream.Close();ClientSocket.Close();

7、//Deductno.ofclientsbyoneInterlocked.Decrement(refSharedStateObj.NumberOfClients);Console.WriteLine("Aclientleft,numberofconnectionsis{0}",SharedStateObj.NumberOfClients);}//Signalmainprocessifthisisthelastclientconnections//mainthreadrequestedtostop.if(!SharedState

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。