博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程
阅读量:5113 次
发布时间:2019-06-13

本文共 1021 字,大约阅读时间需要 3 分钟。

什么是多线程

多线程涉及到并行做某些事情,就像多进程一样。那么多线程与多进程有什么不同呢?当你正在一个电子表格上做计算的时候,可能在同一个桌面上有一个媒体播放器正在放着你喜欢的歌。这是一个两个进程并行工作的例子。一个进程运行电子表格程序。一个进程运行媒体播放器。这样的场景就是总所周知的多任务。近一步看媒体播放器,我们会发现在一个进程中某些事情正在并行的进行着。当媒体播放器正在发送音乐到声卡驱动时,用户界面也在不断的更新。这就是多线程所做的事情 – 单一进程中的并发性。

并发性是怎么实现的呢?在单核CPU上的并行工作是一种错觉,就像电影不过时移动的图像一样。对于多进程,这种错觉是通过在一段非常短的时间之后中断CPU在某个进程上的工作来实现的。然后CPU运行下一个进程。为了在不同进程之间切换,当前进程的程序计数器被保存起来,下一个CPU程序的计数器被加载进来。当然不仅仅只做这些,因为寄存器和某些架构和系统的特定数据也要被加载和保存。

就像一个CPU可以运行两个或多个进程一样,同样有可能让CPU运行一个单独进程中不同的代码片段。当一个进程启动时,它总是会执行一个代码段,我们就说这个进程有一个线程。然后,这个程序可能决定启动第二个线程。然后,两个不同的代码系列同时在一个进程中被执行。单CPU上的并发性是通过重复的保存程序计数器和寄存器然后加载下一个线程的程序计数器和寄存器来实现的。这些循环不断的切换不需要程序来参与配合(系统完成)。在切换到下一个线程时,上一个线程可能处于任何状态。

目前CPU设计的趋势是多核。一个典型的单线程程序只能利用一个核。然而,多线程程序能够被分配给多个核,真正实现了并发执行。这样,在多核CPU上,把工作分派给多个线程就比只分派给单个线程要运行的更快,因为其它的核可以被利用。

GUI线程和工作线程

上面提到,每一个程序在启动后都有一个线程。这个线程叫做“主线程”(在QT应用程序中称为“GUI线程”)。Qt的GUI必须运行在该线程中。所有的窗体部件和其它相关的类,例如QPixmap,都无法在第二个线程中工作。辅助线程通常称为“工作线程”,因为它通常用来分担主线程的某些处理工作。

开发者需要小心多线程编程。要启动一个线程很容易,但是要保证共享数据的一致性却不容易。

转载于:https://www.cnblogs.com/uvsjoh/archive/2013/03/12/2955984.html

你可能感兴趣的文章
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>