在程序开发过程中,开发者总是想尽可能的充分利用计算机的硬件性能来提升程序的执行效率。为了达到这个目标我们会尽可能多的引入多线程来提升程序的并发性能。在QT程序中我们也可以通过引入多线程来提升程序的执行效率,但是在引入多线程的时候,要对项目架构进行严格的设计,避免出现死锁、僵尸线程甚至卡死界面的情况。
包含线程池的QT项目的一般架构如下图所示:
JobWidget对象存在于UI线程中,负责计算结果呈现和与用户的交互操作。
JobManager对象存在于JobManager线程中,该线程负责计算任务的接收和派发以及计算结果的收集和回传。JobManager线程通过使用QThreadPool来进行计算任务的分发。线程池会根据CPU硬件的内核数量动态的伸缩扩展,从而实现效率最优。
每一个Job都是一个独立的计算任务,运行在一个独立的线程中,当计算结束的之后,计算结果会回传到JobManager对象中。
在使用QT进行多线程的开发的时候会用到到一些C++14的特性,所以别忘了添加下面的配置
CONFIG += c++14
定义一个独立运行的任务(job)
多线程计算任务的本质其实就是将一个大型的计算任务拆分成