我希望这是一条评论,但要使用太多字符。无论如何,Ozgur从评论回复中的问题来看,您似乎错失了一点,您不能简单地说我的线程花了这么长时间才能运行,并希望它可以与其他线程神奇地协同工作,这要归功于OS。您必须设计线程并分析它们以获得最坏的性能。如果最坏的情况不能满足您的要求,那么您需要重新设计线程。
因此,您不仅要说线程1要花10毫秒才能完成,而线程2要花20毫秒来完成,您还必须说线程1必须每15毫秒执行一次。线程2必须每40毫秒执行一次。线程3必须每500毫秒执行一次,线程N必须每1500毫秒执行一次。然后为最坏情况下的每个线程花费多长时间分配时间。将所有内容放在一起,找出最坏的情况,然后必须确保每个线程都满足其时序要求。在此分析中,您还可以确定某些线程是否需要比其他线程更高的优先级才能满足其时序要求。
例如,线程5正在运行被线程4中断,线程5被线程3中断,线程3被线程N中断可能是最坏的情况。您将所有这些放到时间轴上,并验证即使在这种最坏的情况下,每个线程也都可以满足其时序要求。您可以通过使用实时操作系统中的调度程序和优先级来确保线程确定性地完成此最坏情况。确定性是构成实时OS的原因。
如果使线程具有相同的优先级,那么您将失去某些(即使不是全部)确定性,因为调度程序可以自由选择下一个要运行的线程。
在Windows之类的操作系统中,不仅不能指定每个线程何时运行,甚至不能保证您的应用程序将在任何时间运行。操作系统可以随时停止您的应用程序并运行某些后台服务。换句话说,没有确定性。因此,Windows不是实时操作系统。虽然,如果您的时序要求很大(例如(线程1每10秒运行一次,线程2每15秒运行一次)),那么您基本上可以将Windows视为实时操作系统,只要考虑到延迟时间(大约每10或15秒一次) (给出或花费几百毫秒的时间,偶尔会错过窗口)就足够了。