我正在阅读Stallings的“操作系统内部和设计原则”,并在关于并发和互斥的章节中读到:
在单处理器系统中,并发进程不能重叠 执行;它们只能交错。此外,一个过程将 继续运行,直到它调用OS服务或直到它 因此,为了保证相互排斥,这就足够了 防止进程被中断。这种能力可以 以OS内核定义的原语形式提供 禁用和启用中断。
我在SO中发现this post似乎解决了这个问题,但是OP并没有详细说明他想要停止的中断类型,并且该帖子已经死了但没有得到接受的答案(除了OP删除了个人资料),所以我希望在这里找到底部。 假设我希望CPU完全专用于我的代码(这只是理论上,我知道这是非常 dangereous),我怎么能用Java实现这个?
答案 0 :(得分:6)
我在实践中发现的最佳解决方案是隔离CPU,即将isolcpus=
添加到Linux启动,配置IRQ Balance以不使用它,并将特定线程绑定到这些隔离的CPU。这将抖动降低到大约10-40微秒。这是我写的一个支持此https://github.com/OpenHFT/Java-Thread-Affinity的库。它通常用于低延迟交易系统,以最大限度地减少抖动。
注意:有不可屏蔽的中断不能以这种方式关闭,我怀疑这样做是不安全的。
您可以使用机器代码指令来禁用中断并再次启用它们,但是您必须是特权用户,并且几乎可以肯定,如果您在任何时间内执行此操作,操作系统中的内容都会中断。