多线程 完全端口分享_第1页
多线程 完全端口分享_第2页
多线程 完全端口分享_第3页
多线程 完全端口分享_第4页
多线程 完全端口分享_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、By wangjin目录1.进程、多线程2.完成端口3.讨论及交流1进程 含义:程序的一个运行实例1.1 进程程序存储在硬盘上内存 heapstackData segmentCode segment1.Load 内存中程序代码操作系统代码2.找到main方法执行3.程序运行中的内存2物理计数器ReloadSave3什么时候会创建进程呢?1. 操作系统初始化启动的时候2.为了完成更多的工作 一个运行的进程创建更多的进程3. 用户执行桌面窗口程序时4Windows 进程 Linux 进程区别51.2多线程简单的说就是具体做事的对象。其做事的资源都是通过进程来获取的,比方说:执行的地址空间(即内存空

2、间),寄存器,cpu资源,线程要工作必须由进程来提供工作的条件,如果没有线程工作,进程就没有存在的意义,进程要有实在存在意义,就至少有一个线程在运行,即主线程,通常来说进程就只管获取硬件资源(提供工作的场地),具体的工作(代码执行)还是要依靠线程来完成。(拿工厂来举例)线程就是 工作的工人, 进程就是 工人工作的 生产线什么是线程?线程与进程的关系6多线程多个线程在运行。多核CPU真正实现了并行执行任务,就像高速公路的交通状况一样,只是当量多了一样会堵车7多线程线程安全问题81.Code Sample 此时的线程B有可能一直阻塞下去,或者进入临界区,CoreDump,作为数据成员的锁 是不能保

3、护析构的92.Code Sample ABBA死锁,相互等待,加锁顺序相反103.Code Sample 11解决方法引入计数,保证中间Proxy的正确释放,如图:其实这就是计数型指针,C+ 11 已经支持,Shared_ptr,类模板控制对象的生成期,对于多线程的编写很重要,保证对象的正确析构和类对象的线程安全。12线程同步问题13锁14锁 用于获取对共享资源的访问唯一性。保持代码执行的原子性,中途不被打断2.条件变量条件变量一般配合锁使用 ,在获取锁之后 访问共享资源,然后使用条件变量等待,等待其他 线程的唤醒线程同步技术153.读写锁和信号量读写锁效率低于 互斥锁mutex,每次加锁,都

4、要更新Reader和Writer的数量。信号量一般是用于并发访问,建议用ThreadPool来做。4.多线程等待尽量避免使用Sleep()、Usleep()、nanosleep()Sleep()。 如果等待一段时间,使用eventloop 注册timer(),通过定时器来回调接着程序执行。如果等待某个事件发生,使用条件变量 来等待出发通知。sleep() 会阻塞线程Block() 不做其他事。16多线程同步总结点:1.最低限度减少共享对象,减少同步场合。2.同步使用非递归的互斥锁,条件变量,慎用读写锁,不要用信号量(互斥锁,条件变量代替使用。)3.不 自己编写 加锁 解锁 代码(尽量用RAII

5、(资源获取及初始化)来实现,利用类的构造和析构来完成创建,加锁,解锁,销毁)4.不手工调用加锁,解锁,通过使用局部变量的类对象的 构造,析构来加锁,解锁。 利用局部变量的作用域刚好是临界区。通常称为(Scopde Locking)5.每次使用Scoped Locking 时,思考以及持有的锁,防止加锁顺序导致死锁。6.不垮进程使用锁,跨进程 用TCP sockets。7.加锁,解锁在同一线程,不让A 线程去解锁B 线程的 锁9.使用Scoped Locking 时出现死锁时,打印调用堆栈定位死锁问题17多线程服务器模型非阻塞IOIO重叠一个线程一个阻塞IO阻塞IO线程池一个线程一个阻塞IOEv

6、ent Loop18什么场景下需要用到多线程?191.有多个CPU可以用,真正做到并发编程2.线程间有共享数据,共享的数据可以修改3.事件响应有优先级之分,通过设置线程优先级来提供优先服务。4.异步操作,如Log file 。不论读还是写 log file 都不应该阻塞5.操作第三方软件,如读取数据库。20Sample 1.背景:服务器机群管理软件,8个计算节点,1个控制节点,配置一样四核CPU,千兆网互联。 软件构成:1.1master,程序监视整个机群状态1.2 slave节点 负责启动、停止 job,监视本机资源1.3 用于使用的client工具,提交 job2.分析: 控制节点需要使用

7、多线程模式,多核CPU,整个机群的状态放于内存中,机器状态共享可变,监控事件有优先级,正常运行结束和异常崩溃处理优先级不一样。 Master 与每个 slave 通信,TCP连接,2个或4个IO 线程,异步往本地硬盘写日志,有可能读写数据库,提供一个monitorj接口,广播推送机群状态给slave。用单独线程来做。Master 线程总结: 4个与slaves 通信的IO 线程 1 个 logging 线程,1个数据库IO 线1个主线程,调度job,1个pushing 线程 广播 机群状态2个和clients 通信的IO线程 212.完成端口1.背景介绍:Windows 下的设备:1.文件 2.目录 3.逻辑磁盘驱动器4.物理磁盘驱动器5.串口6.并口7.邮件槽(一对多(跨主机)8.命名管道(一对一(跨主机)9.匿名管道(单机一对一)10.套接字11.控制台对设备的读取输入即IO操作。异步IO操作的线程通常会被挂起,为了不让IO操作挂起,Windows开发了完成端口(异步I非阻塞O ),使线程在异步IO时,可以做其他的事。2223完成端口使用的条件:设备IO操作要支持重叠结构“Overlapped”异步通信 24完成端口主要使用的函数CreateIo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论