CometPipe数据发送一点改动
Author:放翁(文初)
场景:
前提:长连接推送(每个请求会话时间保持较久)。在事件驱动模式下,多线程可能同时完成任务并通过Http长连接下发数据,对于Response需要有一定的并发保护。
第一版
增加一个lock,获得以后才可以使用Response。
每个线程的处理流程:get lock à use response àrelease lock。
在同一个通道的事件大量并发产生的时候,由于use response比较“重”,使得大量线程生命周期加大(顺序的获取锁),上下文切换频繁,系统load较高。
第二版(现在的版本)
去掉lock,为每一个请求会话增加一个队列和后台线程。
每个线程的处理流程:add message to queue。
后台线程block to wait message and deliver。
第一版的问题不存在了,但在没有消息下行的时候,大量后台线程block wait,对于内存来说还是有些浪费。
复杂却未必有好效果的版本
从上面来看,需要做的就是防止将发送数据放入竞争事务(也就是一个时期只有一个线程负责对队列数据的获取和下发),需要复用线程为多个请求处理下行任务。
大致解释一下流程:
1. 每个线程在放入队列的时候需要先获得读写锁的读锁,然后将数据放入队列。具体获得读锁的目的最后谈。
2. 线程判断是否已经有后台支持线程来处理消息下发,如果没有尝试的去操作needworkerflag的原子布尔对象。
3. 线程如果成功的将needworkerflag原子布尔对象由true改成了false状态,那么表示他获得了取得线程事件的令牌,就向线程池发起执行下发消息的任务。
4. 线程池收到任务后,分配一个线程循环的去获取数据并下发,直到队列瞬时为空。
5. 获取写锁,重新再检查队列是否有数据,如果有下行,然后修改needworkerflag为true,最后释放写锁。(用读写锁就是为了在后台线程退出时保证队列中的被加入的数据完全被执行,而没有并发导致遗留数据在队列但没有任何线程处理的情况,带来的坏处就是在这个写锁临界区里面会有写出动作会阻塞外部在那个时候放数据的过程)
设计很复杂,能够带来的比第二个设计好的点就是可能在消息并发较低的时候充分利用资源,但坏处还是很多的,包括线程切换,线程退出时的短时阻塞,线程池容量大小的考虑。
大家如果有更好的设计和实现的方式可以一起讨论并给出设计和实现的细节说明。
分享到:
相关推荐
9-2 串口发送+接收改动-蓝牙
改动说明V1.01.本工具为将ES中的数据导出到文本中,目前支持导出纯文本和json格式2.单线程运行,后续版本将支持多线程。
改动说明V1.2已支持多线程支持ES账号密码登陆支持SSL加密获取数据。
2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用!
否则读者就需要手工对每个数据流中相应节点的读取和写入数据文件目录位置进行改动,这样才能使数据流正常运行。读者如果希望同时获取IBM SPSS Statistics 20.0和IBM SPSS Modeler 14.1全功能试用版,以及相应软件的...
原厂数据,新机在线备份的。遥控丢失的奇声DVD-8321图像变成彩条,声音正常,用该固件回刷即可解决,没有刷机工具时可以使用卡刷,具体方法是将文件名改成DVDROM.BIN,存在FAT格式U盘的根目录,DVD开机不装碟,插入...
2.程序能自动剔除超限数据及不合格数据 (请在下载完数据后不要做任何改动,不能删除字符)。3.数据有漏测的可能计算不正确,限一个测站为“后-前-前-后”,若只测了“后-前”或“后-前-后”等。类似这种情况请在...
实现设备管理器中的扫描检测硬件改动功能 .版本 2 .支持库 spec .局部变量 ok, 整数型 CM_Locate_DevNodeA (取变量地址 (ok), 0, 0)
TDE 可在存储介质或数据文件被盗时保护存储在介质上的数据,无需在程序代码层面做任何改动。 在操作过程中遇到的常见问题均可参照此文档解决,例如: ORA -28330:此数据类型不允许加密 ORA -28331:加密列的大小...
大概记得以前初次使用PHPMailer的时候,出现过...同时,也帮助那些为PHPMailer无法发送邮件的朋友,里面有示例,稍微改动就可成功发送邮件。 更详细教程请访问:http://blog.csdn.net/zm2714/article/details/7992910
易语言监视文件夹是否被改动源码,监视文件夹是否被改动
2023王道书改动清单.pdf
SPSS数据分析与挖掘实战案例精粹 配套案例源文件 本资源提供了书中所有案例涉及到的数据及IBM SPSS ...否则读者就需要手工对每个数据流中相应节点的读取和写入数据文件目录位置进行改动,这样才能使数据流正常运行。
svn两个版本之间改动的文件列表 包括新增和更新的文件 用PYTHON写的脚本
mega16串口发送程序,已调试。上电自动发送。发送内容在程序里改动。
MD5算法具有以下特点: ...3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
VC判断文件是否被改动。
针对煤矿用普通中小型回转钻机的随钻测斜系统姿态数据无法在线上传的...试验结果表明,该离线式数据同步方法使钻杆数据和姿态数据实现了同步,能够在不改动钻机结构的前提下充分满足普通中小型回转钻机的随钻测斜需求。