术语实时是相当灵活的。“硬实时”往往意味着几十微秒的时间会在“正常工作”和“不能正常工作”之间产生差异。并非所有“实时”系统都需要这种实时性。
我曾经在移动电话的无线电基站上工作过。板上的一个设备有一个中断,每 2 毫秒触发一次。为了正确操作(不丢失呼叫),我们必须处理中断,即在 100 微秒内完成中断内部的工作并用新值写入硬件寄存器 - 如果我们错过了,就会出现掉线。如果 160 微秒后没有中断,系统将重新启动。那是“硬实时”,特别是当处理器仅以几十兆赫兹运行时。
如果您制作视频播放器,它需要几毫秒范围内的实时性。
“显示股票价格”可能在 100 毫秒范围内。
对于网络服务器来说,在 1-2 秒内响应而没有任何大问题可能是可以接受的。
此外,“比 X 更糟糕的最坏情况意味着失败”之间存在差异(例如上面的 100 微秒或掉线的情况 - 如果每隔几周发生一次以上,那就很糟糕了 - 甚至一年几次也确实如此这应该是固定的)。这称为“硬实时”。
但是其他系统,错过你的最后期限意味着“哦,好吧,我们必须重新做一遍”或“一帧视频闪烁了一下”,只要它不经常发生,它可能没问题。这称为“软实时”。
许多现代硬件将使“硬实时”(10 秒或 100 微秒范围)变得困难,因为图形处理器将简单地阻止处理器访问内存,或者如果处理器变热,则将stopclk
引脚拉出 100 微秒...
大多数现代操作系统,例如 Linux 和 Windows,并不真正意味着“硬实时”。在这些操作系统的某些部分,有些代码确实禁用了超过 100 微秒的中断。
您几乎可以肯定地从具有现代硬件的主流现代操作系统中获得一些好的“软实时”(也就是说,错过最后期限并不是失败,只是一个小烦恼)。它可能需要修改操作系统或专用的实时操作系统(可能还有合适的特殊硬件)才能使系统实时运行。
但世界上只有少数几件事需要这种硬实时。通常硬实时要求是由硬件处理的——例如,我上面描述的下一代无线电基站有更聪明的硬件,所以你只需要在接下来的 2-几毫秒,你没有“疯狂地在几十微秒内完成它”。在现代移动电话中,GSM 或 UMTS 协议主要由专用 DSP(数字信号处理器)处理。
“硬实时”要求是如果无法满足特定期限(或一组期限),即使未能满足期限仅发生一次,系统也确实失败了。但是,不同的系统有不同的系统对截止日期的实际时间有不同的敏感度(正如 Jerry Coffin 提到的)。几乎可以肯定的是,可以找到商用通用操作系统完全足以处理硬实时系统的实时要求的情况。绝对可以肯定的是,在其他情况下,如果没有专门的系统,就无法满足此类硬实时要求。
我想说,如果你想从操作系统获得亚毫秒级的保证,那么桌面 Windows 或 Linux 不适合你。这实际上取决于操作系统和调度程序设计的整体理念,并且构建一个硬实时操作系统需要大量考虑锁定和一个线程阻止另一个线程运行等的可能性。
我认为没有一个答案适用于您的问题。是的,您当然可以在具有严格实时要求的系统中使用线程池。除非操作系统对此有特定的支持,否则您可能无法以亚毫秒为单位执行此操作。而且您可能需要有专门的线程和进程来处理最高优先级的实时行为,这不是线程池本身的一部分。
抱歉,如果这不是对您的回答说“是”或“否”,但我认为您需要对操作系统的实际行为进行一些研究,看看它可以提供什么样的保证(最坏的情况)。您还必须决定最坏的情况是什么,以及如果您错过最后期限会发生什么 - 是(很多)人死亡(飞机从天上掉下来),还是某个银行家将损失数百万,是绿色在马路交叉口的两个方向上的灯会同时亮起,还是扬声器发出一些不好的声音?