以下是我对操作系统中的并发性的了解。
为了在OS中运行多任务,CPU将为每个任务分配一个时隙。在执行任务A时,其他任务将“休眠”,依此类推。
这是我的问题:
我有一个计时器程序,可以计算键盘/鼠标的不活动状态。如果在15分钟内仍然不活动,将弹出屏幕保护程序。
如果并发理论如上所述,那么计时器将是不准确的?因为在OS中运行的每个程序都会有一些时间“休眠”,那么定时器程序也有机会“休眠”,但在现实世界中,时间并没有停止。
答案 0 :(得分:1)
您可以使用操作系统中的服务来提供您不会尝试自己实现的计时器。如果代码必须运行简单以计算时间,就计算而言,我们仍将处于黑暗时代。
答案 1 :(得分:1)
在大多数操作系统中,您的任务不仅会在使用时间片时进入休眠状态,而且还会在等待I / O时(这对大多数程序来说更常见)。
像AnthonyWJones所说,使用操作系统的当前时间概念。操作系统内核的时间片太短,不足以为屏幕保护程序引入任何明显的不准确性。
答案 2 :(得分:1)
我认为您的等待过程非常简单:
由于步骤1和2使用操作系统而不是某种运行计数器,因此您无需关心在此活动期间是否随时中断。
答案 3 :(得分:0)
这可能与语言有关。在Java中,这不是问题。我怀疑所有语言都会在这里“做正确的事”。这是一个警告,无论如何这样的计时器并不是非常准确,通常你只能期望你的计时器至少在你指定的时间内睡觉,但可能会睡得更久。也就是说,当时间用完时它可能不是活动线程,因此稍后会恢复处理。
答案 4 :(得分:0)
参见例如http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html
由于系统安排了其他活动,暂停时间可能比请求的时间长。
答案 5 :(得分:0)
您在sleep()
中指定的时间是实时的,而不是您的流程使用的CPU时间。 (当程序休眠时,CPU时间约为0。)