欢迎来到天天文库
浏览记录
ID:251174
大小:213.50 KB
页数:35页
时间:2017-07-14
《多核架构及编程技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于多核编程的案例分析多核架构及编程技术基于多核编程的案例分析.NET环境下,多线程TCP服务案例C/S模式下多媒体socket通信(MFC)(PC-EmbeddedPlatform).NET环境下,多线程TCP服务多线程客户端连接处理对多个客户端连接采用线程安全收集对象进行集中管理。回收垃圾线程工具:Microsoft.NETFrameworkSDKC#C#Complier包含文件:TcpServer.csTcpServer2.csTcpServer2b.csTcpServer3.csTcpClientTest.cs可
2、以从课程网站上下载源代码TCP类usingSystem.Net.Sockets;//namespaceTcpListenerlistener=newTcpListener(portNum);listener.Start();TcpClienthandler=listener.AcceptTcpClient();inti=ClientSockets.Add(newClientHandler(handler));((ClientHandler)ClientSockets[i]).Start();客户端Socket处理线程客户
3、端连接实例集监听线程回收线程为每个已经接收的连接产生一个线程TCP客户端请求垃圾线程将被回收允许TCP服务接收客户端的连接请求。分别为每个请求产生一个线程实例。并启动。线程安全收集关于管理客户端连接,特别是在主TCP线程结束之前,回收垃圾线程的时候,用ArrayList作为线程安全的收集器。privatestaticArrayListClientSockets;lock(ClientSockets.SyncRoot){inti=ClientSockets.Add(newClientHandler(handler));((
4、ClientHandler)ClientSockets[i]).Start();}线程同步垃圾线程回收在典型的TCP服务环境中,许多客户端向服务端向服务器发起连接。而许多客户端同时会断了连接,此时这些断了的连接还占有服务器端系统资源,应该被释放掉。如果没有回收策略的话,服务器将很快超载。垃圾线程需要回收。回收同时,需要注意线程同步。垃圾线程回收方法ThreadReclaim=newThread(newThreadStart(Reclaim));ThreadReclaim.Start();privatestaticvoid
5、Reclaim(){while(ContinueReclaim){lock(ClientSockets.SyncRoot){for(intx=ClientSockets.Count-1;x>=0;x--){ObjectClient=ClientSockets[x];if(!((ClientHandler)Client).Alive){ClientSockets.Remove(Client);Console.WriteLine("Aclientleft");}}}Thread.Sleep(200);}}安全关闭服务在关闭服
6、务之前,应该把所有的连接都关闭掉。ContinueReclaim=false;ThreadReclaim.Join();foreach(ObjectClientinClientSockets){((ClientHandler)Client).Stop();}线程池当客户端的连接多了以后,会严重影响系统性能。线程池的利用可以有效管理所产生的这些线程。减小开销,增加性能。在线程池中将任务重新分配。线程池中线程数量有限制即使没有限制,线程过多,也会使CPU负载过大而死机。//Scheduletaskagainif(Shared
7、StateObj.ContinueProcess&&!bQuit)ThreadPool.QueueUserWorkItem(newWaitCallback(this.Process),SharedStateObj);else{networkStream.Close();ClientSocket.Close();//Deductno.ofclientsbyoneInterlocked.Decrement(refSharedStateObj.NumberOfClients);Console.WriteLine("Aclien
8、tleft,numberofconnectionsis{0}",SharedStateObj.NumberOfClients);}//Signalmainprocessifthisisthelastclientconnections//mainthreadrequestedtostop.if(!SharedState
此文档下载收益归作者所有