我有一个应用程序可以摄取32个实时音频流,对它们进行编码/压缩,并通过网络发送出去,在OSX(10.8.x)上运行。分析表明大部分CPU时间都花在压缩器/编码器功能上,而Activity Monitor显示大约40%的CPU利用率。该应用程序运行良好的单线程,它只是占用一个处理器核心。
为了好玩,我实现了一堆并发调度队列来利用多核处理,现在并行执行大部分编码。活动监视器显示我现在相当均匀地分布在CPU上,但当然我仍然使用相同百分比的总CPU容量(实际上,由于GCD开销稍微多一些)。
唯一真正的优势是多线程情况下的音频数据包比单线程情况下传输时间快4ms,但这对整体系统性能来说并不是一个大问题。
所以问题是这样的:鉴于应用程序运行'OK'单线程,没有任何其他好处可以不占用一个处理器?假设我们有一个4核处理器,使用40%的一个核心,或者四个核心的10%是更好还是更差?数学会说这是一样的。
或者,我只是在无所事事地殴打自己?
谢谢,
查
答案 0 :(得分:2)
只要您使用的核心少于100%,多线程就没有多大优势。
OTOH,很可能并非所有用户都拥有与您一样快的Mac。如果你的程序运行在速度较慢(但仍然是多核)的Mac上,那么单线程将核心固定为100%,那么多线程会加快Mac上的速度。