您的位置:首页 > 其它

多线程提高效率的情况

2017-04-13 17:39 169 查看
今天遇到一个问题,一个高频声卡操作流程中加入一行printf(printf不是内核调用而是属于标准函数库)严重影响了系统的效率以致程序未能达到目的,不加printf则运行正常,那些同时操作复杂界面和播放音效的游戏都能顺畅地运行,说明真正原因并不在于增加了多少CPU的负担,而可能是两个阻塞流程串行运行对其中一个高频操作的运行造成了影响。于是尝试分了两个线程分开处理,结果效率提高了两倍(以运行总时间判断)以上。

上网查询多线程提高效率的问题得到一个说法:

“如果你的程序仅仅是做一种简单的计算,其间不涉及任何可能是使线程挂起的操作,如I/O读写,等待某种事件等等。那么从表面上看,两个线程与单个线程相比,增加了切换的开销,应该比慢才对。但问题是你还得考虑操作系统的调度策略,通常,在支持线程的操作系统中,线程才是系统调度的单位,对同样一个进程来讲,多一个线程就可以多分到CPU时间,特别使从一个增加到两个的时候举例来说,假如在你的程序启动前,系统中已经有50个线程在运行,那么当你的程序启动后,假如他只有一个线程,那么平均来讲,它将获得1/51的CPU时间,而如果他有两个线程,那么就会获得2/52的CPU时间。当然,这个例子是一种非常理想的情况,他没有考虑系统中原有其他线程的繁忙(或者空闲)程度,也没有考虑线程切换”

不过能够提高一倍以上效率,肯定不仅仅是分配更多CPU时间那么简单,可能是这种多流程串行的高频操作会给CPU的调度造成麻烦,而分线程分类处理后CPU可以优化调度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: