取数和写回结果专门用一个线程,比如就主线程,并且负责分配数据给计算线程。
计算线程提前创建好,数量最多等于cpu核数减一。 每个计算线程有自己的数据缓冲区,数据结构最好选用lock-free的ring buffer,buffer的大小,取决于你能容忍延迟的时间;最小用乒乓buffer,一片写入一片计算交替。
主线程轮流往每个计算线程的buffer里写输入数据,完了再轮流读每个buffer,把上一轮或者之前第N轮的结果取出写回。
【 在 capriccio (小草|长相守) 的大作中提到: 】
: 每次myfunc的计算结果要按照从缓存中取出数据的顺序进行排列,而且对实时性要求较高,
: 所以缓存也不大,不能攒一批数据后再并行调用myfunc。
:
: 虽然也能达到目的,但要满足上面的限制条件,程序会比较复杂,我只是想问问有没有我没有了解到的能比较简单的解决这个问题的方法。
--
FROM 183.128.141.*