基于多核编程的案例分析.ppt
《基于多核编程的案例分析.ppt》由会员分享,可在线阅读,更多相关《基于多核编程的案例分析.ppt(35页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、基于多核编程的案例分析 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望基于多核编程的案例分析.NET环境下,多线程TCP服务案例C/S模式下多媒体socket通信(MFC)(PC Embedded Platform).NET环境下,多线程TCP服务多线程客户端连接处理对多个客户端连接采用线程安全收集对象进行集中管理。回收垃圾线程工具:Microsoft.NET Framework SDK C#C#Complier包含文件:TcpServer.csTcpServer
2、2.csTcpServer2b.csTcpServer3.csTcpClientTest.cs可以从课程网站上可以从课程网站上下载源代码下载源代码TCP类using System.Net.Sockets;/namespaceTcpListener listener=new TcpListener(portNum);listener.Start();TcpClient handler=listener.AcceptTcpClient();int i=ClientSockets.Add(new ClientHandler(handler);(ClientHandler)ClientSocketsi
3、).Start();客户端Socket处理线程客户端连接实例集监听线程回收线程为每个已经接收的连接产生一个线程TCP客户端请求垃圾线程将被回收允许TCP服务接收客户端的连接请求。分别为每个请求产生一个线程实例。并启动。线程安全收集关于管理客户端连接,特别是在主TCP线程结束之前,回收垃圾线程的时候,用ArrayList作为线程安全的收集器。private static ArrayList ClientSockets ;lock(ClientSockets.SyncRoot)int i=ClientSockets.Add(new ClientHandler(handler);(ClientHan
4、dler)ClientSocketsi).Start();线程同步线程同步垃圾线程回收在典型的TCP服务环境中,许多客户端向服务端向服务器发起连接。而许多客户端同时会断了连接,此时这些断了的连接还占有服务器端系统资源,应该被释放掉。如果没有回收策略的话,服务器将很快超载。垃圾线程需要回收。回收同时,需要注意线程同步。垃圾线程回收方法ThreadReclaim=new Thread(new ThreadStart(Reclaim);ThreadReclaim.Start();private static void Reclaim()while(ContinueReclaim)lock(Clien
5、tSockets.SyncRoot)for(int x=ClientSockets.Count-1;x=0;x-)Object Client=ClientSocketsx;if(!(ClientHandler)Client).Alive)ClientSockets.Remove(Client);Console.WriteLine(A client left);Thread.Sleep(200);安全关闭服务在关闭服务之前,应该把所有的连接都关闭掉。ContinueReclaim=false;ThreadReclaim.Join();foreach(Object Client in Client
6、Sockets)(ClientHandler)Client).Stop();线程池当客户端的连接多了以后,会严重影响系统性能。线程池的利用可以有效管理所产生的这些线程。减小开销,增加性能。在线程池中将任务重新分配。线程池中线程数量有限制即使没有限制,线程过多,也会使CPU负载过大而死机。/Schedule task again if(SharedStateObj.ContinueProcess&!bQuit )ThreadPool.QueueUserWorkItem(new WaitCallback(this.Process),SharedStateObj);else networkStrea
7、m.Close();ClientSocket.Close();/Deduct no.of clients by one Interlocked.Decrement(ref 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.i
8、f(!SharedStateObj.ContinueProcess&SharedStateObj.NumberOfClients=0)SharedStateObj.Ev.Set();用队列管理多线程任务处理任务处理任务处理FIFO队列结构客户端请求任务监听线程当客户端请求到达,将请求放到队列中。class ClientConnectionPool /Creates a synchronized wrapper around the Queue.private Queue SyncdQ=Queue.Synchronized(new Queue();class ClientService cons
9、t int NUM_OF_THREAD=10;private 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 thread
10、s to handle 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);案例小结共提出了三种方法来实现TCP多线程连接:第一种方法:可以控制每一个线程,但是当产生很多线程的时候,会影响系
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 多核 编程 案例 分析
限制150内