最近,我试图优化单线程循环,其核心归结为类似
while (true)
{
a = A(x)
b = B(a)
c = C(b)
}
换句话说,每一步都取决于上一步的结果。这些功能中的每一个都执行CPU密集型操作。
我最终创建了2个队列和2个新线程并将其解耦,以便原始线程
/* on existing thread */ while (true) queue1.Enqueue(A(x))
/* on new thread #1 */ while (true) queue2.Enqueue(B(queue1.Dequeue()))
/* on new thread #2 */ while (true) c = B(queue2.Dequeue()))
现在3个函数可以并行运行,更好地利用多个核心。
看起来很基本,必须有一个名字。我找不到它。它非常类似pipelining所做的,只有这是线程的并行化技术。