【大学课件】基于多核编程的案例分析.ppt
《【大学课件】基于多核编程的案例分析.ppt》由会员分享,可在线阅读,更多相关《【大学课件】基于多核编程的案例分析.ppt(35页珍藏版)》请在三一文库上搜索。
1、基于多核编程的案例分析,多核架构及编程技术,http:/ C/S模式下多媒体socket通信(MFC) (PC Embedded Platform),.NET环境下,多线程TCP服务,多线程客户端连接处理 对多个客户端连接采用线程安全收集对象进行集中管理。 回收垃圾线程 工具: Microsoft .NET Framework SDK C# C# Complier 包含文件:,TcpServer.cs TcpServer2.cs TcpServer2b.cs TcpServer3.cs TcpClientTest.cs,可以从课程网站上 下载源代码,TCP类,using System.Net.
2、Sockets; /namespace TcpListener listener = new TcpListener(portNum); listener.Start(); TcpClient handler = listener.AcceptTcpClient(); int i = ClientSockets.Add ( new ClientHandler(handler) ) ; (ClientHandler) ClientSocketsi).Start() ;,允许TCP服务接收客户端的连接请求。,分别为每个请求产生一个线程实例。并启动。,线程安全收集,关于管理客户端连接,特别是在主TC
3、P线程结束之前,回收垃圾线程的时候,用ArrayList作为线程安全的收集器。,private static ArrayList ClientSockets ; lock ( ClientSockets.SyncRoot ) int i = ClientSockets.Add ( new ClientHandler(handler) ) ; (ClientHandler) ClientSocketsi).Start() ; ,线程同步,垃圾线程回收,在典型的TCP服务环境中,许多客户端向服务端向服务器发起连接。而许多客户端同时会断了连接,此时这些断了的连接还占有服务器端系统资源,应该被释放掉。
4、如果没有回收策略的话,服务器将很快超载。 垃圾线程需要回收。 回收同时,需要注意线程同步。,垃圾线程回收方法,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- ) Object Client = ClientSockets
5、x ; if ( !( ( ClientHandler ) Client ).Alive ) ClientSockets.Remove( Client ) ; Console.WriteLine(“A client left“) ; Thread.Sleep(200) ; ,安全关闭服务,在关闭服务之前,应该把所有的连接都关闭掉。,ContinueReclaim = false ; ThreadReclaim.Join() ; foreach ( Object Client in ClientSockets ) ( (ClientHandler) Client ).Stop() ; ,线程池,
6、当客户端的连接多了以后,会严重影响系统性能。 线程池的利用可以有效管理所产生的这些线程。减小开销,增加性能。 在线程池中将任务重新分配。 线程池中线程数量有限制 即使没有限制,线程过多,也会使CPU负载过大而死机。,/ Schedule task again if ( SharedStateObj.ContinueProcess ,用队列管理多线程,class ClientConnectionPool / Creates a synchronized wrapper around the Queue. private Queue SyncdQ = Queue.Synchronized( new
7、 Queue() ); ,class ClientService const 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 ;
8、public void Start() ContinueProcess = true ; / Start threads 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.Enque
9、ue(client) ; Thread.Sleep(100) ; ,案例小结,共提出了三种方法来实现TCP多线程连接: 第一种方法: 可以控制每一个线程,但是当产生很多线程的时候,会影响系统性能。 第二种方法: 系统性能会好一些,但是对所产生的线程的控制性差一些。 第三种方法: 性能好,控制灵活。,基于多核编程的案例分析,.NET环境下,多线程TCP服务案例 C/S模式下多媒体socket通信(MFC) (PC Embedded Platform),C/S模式下多媒体socket通信,内容: 案例介绍 软件设计 优化过程,介绍,目的: 熟悉基于多核的编程及优化技术,并将其与嵌入式平台程序优化技
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学课件 大学 课件 基于 多核 编程 案例 分析
链接地址:https://www.31doc.com/p-3035237.html