没有合适的资源?快使用搜索试试~ 我知道了~
首页基于 QWorker 的多线程编程V1.1(肥猫大叔排版贡献)
基于 QWorker 的多线程编程V1.1(肥猫大叔排版贡献) QWorker 是 QDAC 项目带给大家的一套多线程并行编程框架。它基于作业的视角来规划作业多线程编程,简化多线程编程的步骤和方法和交互手法。首先,我们要明白我们为什么需要多线程并行编程?我们之所以使用多线程编程,一般目的不外乎下面两个:1、避免程序界面假死带来的恶劣用户体验2、充分利用现代计算机的处理资源,来加快业务的处理速度。当然,您可能有更好更多的理由来做多线程编程,但上面的这两个理由对于一般的人来说足够了。接下来,一个新的问题来了,我们为什么要什么 QWorker 而不是系统自带的多线程框架来编程?这个理由实际上很简单,使用 QWorker 会进一步简化你的编程逻辑的设计,使你更专注于业务流程的规划和实现,而不去管理线程池及处理资源的调度问题。
资源详情
资源评论
资源推荐

第
1
页 共
53
页
基于
QWorker
的多线程编程
作者
:
swish
版本:
1.1
末次修订日期
:
2015-4-2
排版:
肥猫大叔
QDAC
开发组
swish
作品
官方网站:
http://www.qdac.cc
官方
QQ
群:
250530692
开源网址:
http://sourceforge.net/projects/qdac3
QWorker 专题:
http://www.qdac.cc/?p=191

第
2
页 共
53
页
首先欢迎各个使用
QDAC
相关的各项组件!尤其感谢各位
QDAC
官方群的朋友的集思广义、测试和赞助支持,有你们的支
持,才有 QDAC 的不断进步。
QDAC
是一个免费的开源项目,您不需要为使用本项目的内容支付任何费用。如果您觉得本源码对您有帮助,愿意赞助本
项目的发展(非强制),以使作者不为生活所迫,有更多的精力为您呈现更好的作品,可以赞助作者。
QDAC 允许您自由的复制、分发、修改本源码,但您的修改应该反馈给作者,并允许作者在必要时,合并到本项目中以供使用,
合并后的源码同样遵循
QDAC
版权声明限制。
您的产品的关于中,应包含以下的版本声明
:
本产品使用的 XXXX 来自 QDAC 项目,版权归作者所有,官方网站:www.qdac.cc。
【注意】
作者对本项目的品质不提供任何担保,您在使用本项目的源码之前,请确认这一点。
QDAC
开发组不为由此给您及您客户
造成的任何损失承担任何法律及道义责任。
【技术支持】
如有技术问题,您可以加入
QDAC
官方
QQ
群
250530692
共同探讨,但请注意这是一个技术群,偶尔风花雪月没什么关
系,但不要刷屏造成大家的困扰,同时,不要进行任何人身语言攻击,否则将被 T 出群。
本项目目前没有提供任何帮助文件,所有的函数等我尽量在源码中加入足够的注释,以便大家了解。
如有其它问题,可以发邮件到
109867294@qq.com
。
扫描下面的二维码加入 QDAC 官方 QQ 群:
如果需要单独培训或定制,可以作者单独联系,费用根据实际情况另行计算。
【赞助】
本项目接受各位热心朋友的赞助,赞助方式:
支付宝:
guansonghuan@sina.com
姓名:管耸寰
建设银行:
户名:管耸寰
账号:
4367 4209 4324 0179 731
开户行:建设银行长春团风储蓄所

第
3
页 共
53
页
目 录
第一章 引言................................................................................................................................................................................................. 5
第二章 不同的作业视角............................................................................................................................................................................. 7
第三章 第一个作业..................................................................................................................................................................................... 9
第四章 传递参数给作业........................................................................................................................................................................... 13
第五章 后台线程与用户界面交互........................................................................................................................................................... 17
第六章 清理现场....................................................................................................................................................................................... 20
第七章 线程定时器................................................................................................................................................................................... 22
第八章 状态机:信号与广播................................................................................................................................................................... 26
第九章 作业分组....................................................................................................................................................................................... 29
第十章 使用分组作为业务处理队列.......................................................................................................................................................34
第十一章 工作流控制............................................................................................................................................................................... 36
第十二章 For 并行...................................................................................................................................................................................38
第十三章 计划任务................................................................................................................................................................................... 41
第十四章 状态跟踪................................................................................................................................................................................... 44
第十五章 同步与锁定............................................................................................................................................................................... 51
第十六章 附加选项................................................................................................................................................................................... 53

第
4
页 共
53
页
第一章 引言
QWorker
是
QDAC
项目带给大家的一套多线程并行编程框架。它基于作业的视角来规划作业多线程编程,简化多线程
编程的步骤和方法和交互手法。
首先,我们要明白我们为什么需要多线程并行编程?
我们之所以使用多线程编程,一般目的不外乎下面两个:
1、避免程序界面假死带来的恶劣用户体验。
2
、充分利用现代计算机的处理资源,来加快业务的处理速度。
当然,您可能有更好更多的理由来做多线程编程,但上面的这两个理由对于一般的人来说足够了。
接下来,一个新的问题来了,我们为什么要什么 QWorker 而不是系统自带的多线程框架来编程?
这个理由实际上很简单,使用
QWorker
会进一步简化你的编程逻辑的设计,使你更专注于业务流程的规划和实现,而
不去管理线程池及处理资源的调度问题。
那么,什么是作业?
在
QWorker
中,所谓的作业就是一个逻辑上的业务处理单元。我们要实现一个复杂的任务时,可以将其分解成一到多
个小的任务,每个任务由一个函数来管理,这个函数我们就可以将其理解为一项作业,而这些函数的组合就构成了一个作业
分组。作业我们可以让其运行在主线程或者后台线程,注意一点,主线程不适合进行长时间作业,那样会造成主线程阻塞,
造成假死的现象,影响用户体验。
现在看看,
QWorker
为我们提供了什么呢?
1、一个跨平台的异步执行体系
一旦我们通过
Workers.Post
直接来投寄一个异步作业,这个作业将在后台被计划执行。
2
、一个跨平台的计划任务框架
通过 At 函数,可以满足作业定时执行的需求。
3
、一个高精度的后台线程定时器
通过
Post
时设置重复间隔,可以简单的生成一个定时重复作业,实现后台线程定时器的效果。
4、一个松散耦合的业务框架
通过信号建立不同模块的不同单元的联系,可以很好的实现模块间的松散耦合和自动触发。
5
、一个流程管理框架
通过作业组(TQJobGroup)可以将多个作业管理在一起,然后串行或并行执行,并在全部作业执行完成时,得到相应的
事件通知,当然也可以等待全部作业执行完成。
6
、一个并行操作引擎
通过 Workers.For 可以并行循环执行同一个过程,而直接 Post 到后台的作业,也会被计划成并行执行。
7
、一个线程池
QWorker
提供了一个自动管理线程生命周期的线程池。当然如上所述,它的功能远不止于此。
我们接下来,从现实的逻辑上来对比以加深 QWorker 体系的理解。我们先将其中的触角分配一下:
作业(
JOB
) – 用户交付要完成的任务
工作者(
Worker
)
-
完成任务的工人
作业管理器(Workers)- 包工头

第
5
页 共
53
页
首先,包工头会雇佣少数固定工人以完成基本的工作,它的数量,在
QWorker
中,由
Workers.MinWorkers
决定,
默认值为 2,不能小于 1。没有这些工人,一旦有作业过来,包工头得现招人,显然很浪费时间,而如果始终养着一帮工人,
对于包工头来说,显然投资(资源占用)太大。一旦作业多了,忙不过来怎么办,那就需要招聘新工人来解决了所有工人的
数量由
Workers.MaxWorkers
属性来决定,默认是
CPU
核心数
*2+1
。但长期养着那么多临时工是不可能的,但立即解雇显
然也不好(万一后面紧接着有新作业到来还得现雇),所以包工头会在一段时间没活后,将尽量解雇工人直到达到
Workers.MinWorkers
指定的限制,以减少投资。这个时间,由
Workers.FireTimeout
来决定,默认是
15
秒。
当作业被用户交付给包工头后,根据作业的不同,需要包工头在不同的时间点安排工人去执行。到了执行的时候,包工
头会从现在雇佣的工人中,找有没有空闲的工人,如果有,直接交付处理,如果没有,则雇佣新的工人来完成作业。
在后面的章节,我们将进一步分析和了解如何使用
QWorker
进行多线程编程。
剩余52页未读,继续阅读















jackchina999
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- Xilinx SRIO详解.pptx
- Informatica PowerCenter 10.2 for Centos7.6安装配置说明.pdf
- 现代无线系统射频电路实用设计卷II 英文版.pdf
- 电子产品可靠性设计 自己讲课用的PPT,包括设计方案的可靠性选择,元器件的选择与使用,降额设计,热设计,余度设计,参数优化设计 和 失效分析等
- MPC5744P-DEV-KIT-REVE-QSG.pdf
- 通信原理课程设计报告(ASK FSK PSK Matlab仿真--数字调制技术的仿真实现及性能研究)
- ORIGIN7.0使用说明
- 在VMware Player 3.1.3下安装Redhat Linux详尽步骤
- python学生信息管理系统实现代码
- 西门子MES手册 13 OpcenterEXCR_PortalStudio1_81RB1.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论1