我正在考虑处理管道的多线程架构.我的主处理模块有一个输入队列,从中接收数据包.然后,它对这些数据包执行转换(解密等)并将它们放入输出队列.
线程来自于许多输入包可以使它们的内容彼此独立地转换.
但是,妙语是输出队列必须与输入队列具有相同的顺序(即,第一个拉出输入队列必须首先被推入输出队列,无论其转换是否先完成.)
当然,输出队列会有某种同步,所以我的问题是:确保维持这种排序的最佳方法是什么?
Ant*_*ams 11
让一个线程读取输入队列,在输出队列上发布占位符,然后将项目交给工作线程进行处理.数据准备就绪后,工作线程会更新占位符.当需要输出队列中的值的线程读取占位符时,它可以阻塞,直到相关数据准备就绪.
因为只有一个线程读取输入队列,并且此线程立即将占位符放在输出队列上,所以输出队列中的顺序与输入中的顺序相同.工作线程可以很多,并且可以按任何顺序进行转换.
在支持期货的平台上,它们是占位符的理想选择.在其他系统上,您可以使用事件,监视器或条件变量.
具有以下假设
我会考虑以下流程:
输入队列侦听器执行以下步骤:
工作线程执行以下操作:
消费者执行以下操作: