请教一个多线程CPU性能的问题
最近一个问题一直解决不了,找不到关键所在,希望各位高手给点建议:
我写了一个编码线程,用来独立地对视频图像进行实时编码,为了测试,我将视频图像固定为简单的静止图像序列,我用的是H.264 baseline profile编码标准,352*288大小,这样,假设在我的C1.7/512M机器上进行一路编码的CPU占用率5%左右,现在,我想同时进行两路编码,也就是互相独立地开两个同样的线程各自编码,于是问题出来了,CPU占用率直线上升,大部分情况下高达40%,当然偶尔也会降到10%左右。
这里需要说明的是我的解码线程是很独立的,不需要和其他线程同步,所以不存在同步开销。那为什么单路解码CPU占用不高,两路就高出那么多呢?如果单路5%两路15%也可以理解,但现在却是40%?
同样的问题,我还测试过我的解码线程,一般地,我开一个线程进行一路352*288大小25帧实时解码,占用CPU不超过2%,当我再增加一路变为2个线程解2路时CPU占用不超过5%,3个时一般不超过8%,但是当4个线程解4路时CPU又直线上升到了30%多?
到底是哪儿成了瓶颈呢?另外,我将线程中动态内存分配的地方改成开始时一次性创建私有堆分配内存,以避免共享内存访问的问题,但感觉性能影响不大,而且我改为不用堆而全部在堆栈内解码也不能解决上述问题。
我的感觉好像是一个进程的CPU占用率一旦达到某个值时再增加一个比较消耗CPU的线程,该进程的CPU占用率就不是量变了,而好像变成质变了,一下子提高了很多。