致谢(Acknowledgement):
感谢Youtube博主Qt With Ketan与KDAB精心录制的Qt多线程处理应用教程,感谢Bilibili博主爱编程的大丙对Qt多线程与线程池内容深入浅出的讲解。
一、计算机线程相关概念
线程概念[1]:
在计算机科学中,执行线程是可以由调度程序(通常为操作系统的一部分)独立管理的编程指令的最小序列,其被包含在进程之中,是进程中的实际运作单位。
多线程概念[2]:
在计算机体系结构中,多线程是中央处理器(CPU)或多核处理器中的单个内核提供多个执行线程的能力。多线程技术,即每一个线程都代表一个进程内的一个独立执行上下文序列。
进程概念[3-4]:
在计算机科学中,进程是计算机中已运行程序的实体。进程曾经是分时系统的基本运作单位;在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。
程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。若干进程有可能与同一个程序相关联,并且每个进程皆可以同步或异步(并行或循序)的方式独立运行。现代计算机系统可在同一段时间内以进程的形式将多个程序加载到内存中,并基于时间共享(或称时分复用)以在一个处理器上表现出同时运行的感觉。
同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间、文件描述符和通信处理等。同一进程中的多个线程有各自的调用栈(call stack)、寄存器环境(register context)和线程本地存储(thread-local storage)。
CPU(Central Processing Unit)[5]:
中央处理单元,CPU不等于物理核,更不等于逻辑核。一个CPU可以有多个物理内核,同时在超线程技术下,一个物理内核可以分为多个逻辑核。
CPU物理内核[5]:
具体存在的、真实的CPU核,有独立的电路元件以及L1,L2缓存,可以独立地执行指令。
CPU逻辑处理器(逻辑核)[5]:
在同一个CPU物理内核里逻辑层面的核。逻辑核得益于超线程技术(Hyper-threading),超线程可以在一个逻辑核等待指令执行的间隔(等待从缓存或内存中获取下一条指令),把时间片分配到另一个逻辑核,高速地在两个逻辑核之间切换。
二、基于Qt的多线程并行和多线程循序运行Demo
该Demo的代码工程文件夹已与本博客进行资源绑定,其参考自Youtube博主Qt With Ketan的技术视频。
参考资料:
[1] Thread (computing) - Wikipedia
[2] Multithreading (computer architecture) - Wikipedia
[3] https://en.wikipedia.org/wiki/Process_(computing)
[4] 计算机操作系统中的线程/进程
[5] 性能基础之CPU、物理核、逻辑核概念与关系-腾讯云开发者社区-腾讯云 (tencent.com)
[6] 数据库系统工程师教程 / 王亚平,刘伟主编.—4版.—北京:清华大学出版社,2020.12(2022.3重印)
[7] Multithreading with Qt (Part 6) - Signals and Slots across Threads (youtube.com)
[8] Qt 6 C++开发指南 / 王维波,栗宝鹃,侯春望著.—北京:人民邮电出版社,2023.1.
参考案例:
/*1*/Qt QMutex | MultiThreading Synchronization In C++ | Prevent Deadlocks | | Qt C++ | Qt Creator (youtube.com)
/*2*/ Qt中多线程-线程池的使用-C/C++/qt_哔哩哔哩_bilibili