作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑用于处理管道的多线程架构。我的主处理模块有一个输入队列,它从中接收数据包。然后它对这些数据包执行转换(解密等)并将它们放入输出队列。
线程进入许多输入数据包可以使其内容相互独立转换的地方。
然而,关键是输出队列必须与输入队列具有相同的顺序(即,第一个从输入队列中拉出的必须是第一个插入输出队列的,无论其转换是否首先完成。)
自然,输出队列会有某种同步,所以我的问题是:确保保持这种排序的最佳方式是什么?
最佳答案
让一个线程读取输入队列,在输出队列上发布一个占位符,然后将项目交给工作线程进行处理。当数据准备好时,工作线程更新占位符。当需要输出队列中的值的线程读取占位符时,它可以阻塞,直到相关数据准备好。
因为只有单个线程读取输入队列,并且该线程立即将占位符放在输出队列中,所以输出队列中的顺序与输入中的顺序相同。工作线程可以有很多,并且可以按任何顺序进行转换。
在支持 future 的平台上,它们是理想的占位符。在其他系统上,您可以使用事件、监视器或条件变量。
关于multithreading - 在多线程管道中维护秩序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227042/
这个问题已经有答案了: Can a private method in super class be overridden in the sub-class? (12 个回答) 已关闭 6 年前。 我
我有一个从表中获取所有列的查询,然后我做了一些工作。问题是我使用插入的列名,但由于 Get-Member,它们的顺序不同。有没有办法获取属性名称(列名称)并维护顺序或重新排序 System.Data.
我是一名优秀的程序员,十分优秀!