请问一下各位资深程序猿,这种情况有必要改构架嘛?

  • 我好像是小号
    如题目。。。。现在是这样的,硬件配置6代i3双核四线程。


    程序是qt,c++开发的。程序全速运行的时候CPU占用率百分之85。

    程序有四个处理事件ABCD,现在没有用多线程并发处理。
    假如ABCD各耗时1秒,程序全部处理完成四个事件需要4秒。

    现在想提速,我想多开线程,四个线程同时处理四个事件,我觉得这样的话,程序处理完成四个事件,应该只要一秒了,意思就是程序处理完成四个事件需要时间,应该是其中单个耗时最大事件需要的时间。

    但是程序猿觉得木有必要,说第一,现在CPU占用率已经百分之85了,第二才双核四线程,程序其他地方已经用了不少线程了,开不了这么多了就算改多线程,提速应该也不明显。第三线程开多了不稳定。

    咦?qt的多线程跟CPU多线程有啥关系?是不是CPU双核四线程,qt也最多并发四个线程?同时还要看有没有其他事件已经占用线程了?

    在下才疏学浅,学艺不精,虚心向各位大佬请教

    iOS fly ~
  • G
    GleeU
    付费解答 iPx fly ~
  • 我好像是小号
    回复2#GleeU
    咦?是有个梨嘛?iOS fly ~
  • z
    zhdphao
    回复3#我好像是小号

    同一棵梨树上长出来的葫芦娃兄弟。有7个呢。比如有个屁(UgPee)。
  • 四维
    这个看你的abcd四个线程是cpu全力干活多还是io输入输出多吧

    io多的可以试一试多线程。cpu多的估计用处不大。 人生如梦
  • 多聋
    付费解答吧,你得把代码贴出来看才知道。六代i3双核四线程能跑到85%,占用率够高的了,计算密集型的?还用的Qt,是不是有界面加载数据的要刷新的?Qt有些有天生bug的,有可能不需要改动太大也能搞定。不过照你说的程序员的水平,也未必能搞定。
    cpu的多线程和代码里的多线程两码事,一个cpu照样跑多线程,切换就是了。
  • 我好像是小号
    回复6#多聋
    OpenCV这个是CPU大户。 iOS fly ~
  • z
    zeroxia
    如果现在ABCD每个任务都是纯粹的单线程,而CPU本身是多核,改成多线程应该是会有明显改善的。
    当然,如果你自己的程序是单线程,但是ABCD每个任务调用的库本身使用上了并发特性,那么你的程序在处理耗时计算时已经是多线程了,这样改成ABCD并行可能会有反作用。

    简单测试一下:
    你用现成的程序,同时运行4个,每个都跑ABCD。看看时间是运行一个的4倍还是少一些。
  • 我好像是小号
    回复8#zeroxia
    好的,多谢大佬指点迷津 iOS fly ~
  • s
    szbddz
    从硬件角度

    如果你的CPU占用已经到了85%以上了,多线程能发挥的空间其实已经很小了

    如果cpu到了100%,那多线程只会提供25%的额外发热和0%的性能提升
  • 猪猪代购
    把OpenCV的算法跑到GPU上去。
  • 8
    80486
    看你应用是什么,OpenCV应该放到GPU上去,我估计大概率是你的程序员在一个线程里同步处理了所有事件,导致了单核高占用率,不过能用就将就将就吧,又不是不能用,不行升级下硬件。
  • 寒冰炫
    多线程处理一般是用于后台处理的时候前端不会假死...让前端展示的时候后台同时处理数据.我觉得你cpu都占用到85%了,改多线程提升不会很大吧
  • q
    q350031989
    给那程序猿两万块钱让改成多线程的,嫌贵就别改了,不够费事劲呢
  • w
    wuketidai
    就是上面说的,确定是 io 密集还是 cpu 密集,后者用多线程反而慢
  • R
    Ricepig
    已经85%了,没啥必要了。除非你换硬件,然后发现cpu低于50%
  • s
    siweilinux
    就4秒改啥多线程,累
  • n
    net.ieee
    你得搞清楚为啥占了85%,这四秒都在做计算,那么换一个并行算法库试试;反之这四秒都在等待其他事件,你指望线程能解决这个问题吗?并行只是一种解决问题的方式,但并非问题的来源,先搞定来源再说。另外,85%的cpu使用率如果不影响其他程序也就无所谓了,反之必须得改,程序员不用并行也得想个办法改,你说呢?
  • N
    NetCobra
    具体能不能改不好说,看具体情况。

    并不是“CPU双核四线程,qt也最多并发四个线程”,但是线程多了各个线程之间的通讯代价也会提高,开发的难度会增加,也就是你的程序员所说的“线程开多了不稳定”

    有些情况lz没有说清楚,比如:
    “全速运行的时候CPU占用率百分之85”——是所有的CPU核心都在忙活还是一两个在忙活其他闲的要死?
    abcd之间有没有依赖?比如b要等a的结果,c要等a和b的结果等等,如果有依赖就没法并行处理。