当前位置: 首页 > article >正文

基于Qt的多线程并行和循序运行实验Demo

        致谢(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),超线程可以在一个逻辑核等待指令执行的间隔(等待从缓存或内存中获取下一条指令),把时间片分配到另一个逻辑核,高速地在两个逻辑核之间切换。

CPU物理内核和逻辑核关系示例

二、基于Qt的多线程并行和多线程循序运行Demo

        该Demo的代码工程文件夹已与本博客进行资源绑定,其参考自Youtube博主Qt With Ketan的技术视频。

基于Qt的多线程并行、多线程循序运行Demo图示

参考资料:

[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


http://www.kler.cn/a/371057.html

相关文章:

  • 闭包 - 2024最新版前端秋招面试短期突击面试题【100道】
  • 详细指南:解决Garmin 手表无法与电脑连接的问题
  • 我谈Canny算子
  • leetcode 75-13 k和数对的最大数目
  • MLP预售开启,革新去中心化通信生态:智能手机与AI Agent齐上阵
  • CSS.导入方式
  • yolov8环境搭建+训练自己的数据集
  • Notepad++如何同时检索多个关键字
  • 单目相机标定
  • PG数据库之视图详解
  • React写关键字高亮的三个方案
  • Node.js:内置模块
  • Docker | 通过commit操作实例来认识镜像底层实现的原理以及学会打包镜像
  • 前端零基础入门到上班:【Day3】从零开始构建网页骨架HTML
  • 【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型
  • static函数和友元
  • Linux云计算 |【第五阶段】ARCHITECTURE-DAY5
  • 【华为HCIP实战课程十八】OSPF的外部路由类型,网络工程师
  • df -h 和df -i 的区别
  • pip命令行安装pytest 一直报错
  • springboot075电影评论网站系统设计与实现(论文+源码)_kaic
  • Bash、sh 和 Shell都弄混了?
  • 软考架构师论文范文(游戏后端)
  • 为 Python 项目配置 Git 忽略文件的实用指南
  • SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测
  • vue2项目在发布后更新,提示用户刷新页面