其他分享
首页 > 其他分享> > 趣谈Qt多线程(1)

趣谈Qt多线程(1)

作者:互联网

好久没写文章了,一直觉得写文章很费时间也没什么人看,但是还是觉得自己应该写一写,写文章并不全是给别人看,也算是自己的一个记录,记录自己的职业生涯中的一些感触和犯二瞬间。

话不多说,开始今天的表演。

1 什么是多线程

线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

          什么是多线程呢?即就是一个程序中有多个线程在同时执行。

对于这种比较正式的解释对于熟悉多线程的人来说,和理解1+1=2没有本质的区别,但是对于一些刚入门的新人来说,还是存在一定的理解成本。今天就换一个方式解释一下什么是多线程。

首先还是让大圣来解释一下吧!

                                                                                                

孙悟空拔几根毫毛,吹一口气就出来好几个猴子分身,一个给他端茶,一个给他捏脚,还有给帮他打怪升级。而他自己在干嘛呢?可能是在躺着吃桃子,也可能在当吃瓜群众,也可能在一旁指挥。

其实多线程和孙悟空的分身异曲同工,他的主要作用就是用来分担主线程的压力,而这些分身就是所谓的子线程。

1.1 什么多线程

一般的小程序采用单线程即主线程就可以实现目的,这种模式下的功能都相对比较单一且具有一定的执行逻辑顺序。例如买张机票出行,买票 -> 排队安检 -> 登机 只要按这样的流程走下去就行了(想跳过流程的同志估计也不是什么好同志,机场也不答应)。那么问题来了,这一天小猿和一个女性朋友一起出行(程序猿也有春天),排队人很多(可能是春运),突然这位女性朋友想要喝一杯热的奶茶。请问小猿该怎么办?说拒绝的请自动离开本页面;跳出排队出去买的,恭喜你好人卡一张;机智的本猿果断叫了一个跑腿,自己还在这排队同时等着跑腿送奶茶过来。

                                                                                                              

从这个事情来看多线程,1 跑腿需要我手动去叫 -- 多线程也需要手动创建和开启

                                        2 叫玩跑腿我会付出额外的跑腿费 -- 多线程也不能白P,也需要额外的资源开销

                                        3 我排队和买奶茶两件事情是独立进行的,互不影响 -- 多线程之间也相对比较独立,各干各的事情

                                        4 飞机都起飞了,奶茶还没送到  -- 多线程也会出现这种情况,不能在适当的时机完成工作(实际代码中会记性逻辑处理)

实际结果就是本猿牵着这位喝着热奶茶的女性朋友的手,顺利快速的排队过了安检。

多线程其实不止是分担任务这么简单,在Qt中UI线程处于主线程,如果所有任务都交给主线程处理,那么我们的界面就可以像树懒一样流畅的运动了。例如我们在软件界面中单线程下载一个较大的文件,点击下载我们的程序就开始进行下载任务,这时候界面处于阻塞状态(卡死状态),试想一下如果是你在用这个软件,你想不想打死这个程序员。

1.2 什么情况用多线程

多线程其实和初恋女友差不多,看起来清纯美好,但用起来感受怎么样只有自己知道。老司机得心应手,萌动少年四处碰壁。

因为多线程中不同线程处于相对独立的工作状态,因为多线程的同步和管理相对单线程来说会更加困难,同时多线程中也会出现很多单线程中不会出现的匪夷所思、奇形怪状的问题。那么到底该在什么情况下使用多线程呢?

       1、 程序包含复杂的计算任务,同时需要保证主线程实时性的情况
                    主要是利用多线程获取更多的CPU时间(资源)。
      2、 处理速度较慢的外围设备
                    比如:打印时。再比如网络程序,涉及数据包的收发,时间因素不定。使用独立的线程处理这些任务,可使程序无需专门等待结果。
      3、 程序设计自身的需要
                    WINDOWS系统是基于消息循环的抢占式多任务系统,为使消息循环系统不至于阻塞,程序需要多个线程的来共同完成某些任务。

多线程的缺点:
       1. 如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换.
       2. 更多的线程需要更多的内存空间
       3. 线程中止需要考虑对程序运行的影响.
       4. 通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生

 

很多时候在有界面的情况下,尤其是Qt界面程序中,主程序只会承担较少的工作任务,甚至可能长期处于空闲状态(黑心老板),主线程中主要就进行页面的刷新、逻辑的指挥以及结果的处理。

                                                                          -------------------码字不易,请关注和点赞,支持一下脱发的小猿--------------------------

下篇文章将继续多线程的具体使用及其代码(看黑心老板是怎么找到员工、指挥员工、收割果实)

                                                                                 

 

 

标签:趣谈,Qt,排队,程序,跑腿,线程,奶茶,多线程
来源: https://blog.csdn.net/Lewispu/article/details/114783251