基于多核编程案例分析.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于多核编程的案例分析 .NET环境下,多线程TCP服务案例 C/S模式下多媒体socket通信(MFC) (PC - Embedded Platform) .NET环境下,多线程TCP服务 多线程客户端连接处理 对多个客户端连接采用线程安全收集对象进行集中管理。 回收垃圾线程 工具: Microsoft .NET Framework SDK C# C# Complier 包含文件: TCP类 线程安全收集 关于管理客户端连接,特别是在主TCP线程结束之前,回收垃圾线程的时候,用ArrayList作为线程安全的收集器。 垃圾线程回收 在典型的TCP服务环境中,许多客户端向服务端向服务器发起连接。而许多客户端同时会断了连接,此时这些断了的连接还占有服务器端系统资源,应该被释放掉。如果没有回收策略的话,服务器将很快超载。 垃圾线程需要回收。 回收同时,需要注意线程同步。 垃圾线程回收方法 安全关闭服务 在关闭服务之前,应该把所有的连接都关闭掉。 线程池 当客户端的连接多了以后,会严重影响系统性能。 线程池的利用可以有效管理所产生的这些线程。减小开销,增加性能。 在线程池中将任务重新分配。 线程池中线程数量有限制 即使没有限制,线程过多,也会使CPU负载过大而死机。 用队列管理多线程 案例小结 共提出了三种方法来实现TCP多线程连接: 第一种方法: 可以控制每一个线程,但是当产生很多线程的时候,会影响系统性能。 第二种方法: 系统性能会好一些,但是对所产生的线程的控制性差一些。 第三种方法: 性能好,控制灵活。 基于多核编程的案例分析 .NET环境下,多线程TCP服务案例 C/S模式下多媒体socket通信(MFC) (PC - Embedded Platform) C/S模式下多媒体socket通信 内容: 案例介绍 软件设计 优化过程 介绍 目的: 熟悉基于多核的编程及优化技术,并将其与嵌入式平台程序优化技术相联系。复习基于嵌入式平台的编程技术。 介绍: 采用C/S模式(服务器端/客户端)。 只有一个Server,但有多个Client。 服务器端:PC 多核PC 客户端:嵌入式平台(多台) 双向通信。 传输多媒体信息,如图片。 服务器端有独立IP地址。 客户端采用GPRS模块介入Internet。 采用Socket通信机制。 服务器端程序:Visual C++ 6.0或者 C# 客户端程序: Embedded Visual C++ 4.0 SP1 SP2 SP3 为什么采用这个案例 通过这个案例,我们可以进一步熟悉和掌握: 基于socket机制的网络通信编程 网络通信的阻塞和非阻塞机制的区别 TCP/IP通信中数据包包头的重新封装。 因为客户端是通过GPRS接入Internet,此时即使采用可信连接的TCP协议,当采用多线程时仍然会产生严重的丢包现象(此时数据包必须小于1.2K)。所以需要对所传输的内容进行纠错。 创建和销毁线程的方法 内存泄漏的处理 基于多核的编程工具的使用 Intel多核编程工具包对程序的优化方法 共享内存的处理 可以对单核多线程与多核对线程进行比较 对嵌入式平台开发而言: 单核多线程的编程方法 通过GPRS介入Internet的方法 创建和销毁线程 等等 软件设计 服务器端软件设计: 服务器端有一个主线程 支持同时多个客户端的连接,为每个客户端建立一个线程。 建立连接后,采用socket方式从客户端接收或发送至客户端:图片等多媒体信息。 当客户端采用多线程发送的时候,服务器端程序接收线程对接收数据包部分并行处理,每个新线程所接收的内容都按照socket包头信息放置,等所有线程均结束后对所接收的内容进行重组还原。 软件设计 客户端软件设计 客户端有一个主线程 为发送和接收创建线程 目的:不阻塞用户界面的操作 为发送和接收的数据包大小和百分比,建立线程用进度条显示。 采用TCP协议对服务器进行操作。 对发送的数据包进行包头的重构。 服务器端 主线程:管理程序状态 空闲任务线程:管理队列 事件线程:监听socket请求,一旦有接入,就交给任务线程。 任务线程:有多个,根据接入请求的多少来定。 采用临界端(critical section)进行同步处理。 采用OpenMP库函数 协议栈 客户端: 代码分析: 常用库 OSMutex类:封装不同操作系统对线程同步支持的差异 OSThread类:封装并且定义了使用线程的方式 OSCond类:状态变量 Socket类: EventContext EventThread Socket UDPSocket TCPSocket TCPListenerSocket 调度策略 任务调度: 排队 任务状态:运行、暂停、终止。 开发过程 程序调试 通过启用和禁止程

文档评论(0)

天马行空 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档