多线程提高效率的情况

4 篇文章 0 订阅

今天遇到一个问题,一个高频声卡操作流程中加入一行printf(printf不是内核调用而是属于标准函数库)严重影响了系统的效率以致程序未能达到目的,不加printf则运行正常,那些同时操作复杂界面和播放音效的游戏都能顺畅地运行,说明真正原因并不在于增加了多少CPU的负担,而可能是两个阻塞流程串行运行对其中一个高频操作的运行造成了影响。于是尝试分了两个线程分开处理,结果效率提高了两倍(以运行总时间判断)以上。
上网查询多线程提高效率的问题得到一个说法:
“如果你的程序仅仅是做一种简单的计算,其间不涉及任何可能是使线程挂起的操作,如I/O读写,等待某种事件等等。那么从表面上看,两个线程与单个线程相比,增加了切换的开销,应该比慢才对。但问题是你还得考虑操作系统的调度策略,通常,在支持线程的操作系统中,线程才是系统调度的单位,对同样一个进程来讲,多一个线程就可以多分到CPU时间,特别使从一个增加到两个的时候举例来说,假如在你的程序启动前,系统中已经有50个线程在运行,那么当你的程序启动后,假如他只有一个线程,那么平均来讲,它将获得1/51的CPU时间,而如果他有两个线程,那么就会获得2/52的CPU时间。当然,这个例子是一种非常理想的情况,他没有考虑系统中原有其他线程的繁忙(或者空闲)程度,也没有考虑线程切换”
不过能够提高一倍以上效率,肯定不仅仅是分配更多CPU时间那么简单,可能是这种多流程串行的高频操作会给CPU的调度造成麻烦,而分线程分类处理后CPU可以优化调度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值