Theory 什么是饥饿?
在多任务系统中,某些异常情况会阻止进程或线程的执行。我将把进程和线程简单地称为“进程”。其中两种情况称为死锁和活锁 前者指的是相互阻塞的进程,从而阻止其中一个进程执行。后者指的是相互阻止进程进行,但实际上并不阻止执行的进程。例如,它们可能会不断导致彼此回滚事务,但都无法完成它们 另一种情况称为资源匮乏,在这种情况下,进程进行所需的一个或多个有限资源已被耗尽,除非进程进行,否则无法恢复。这也是活锁的一个特例 我想知道,对于“饥饿”是否还有其他定义,特别是学术定义,而不仅仅限于“资源饥饿”。特别欢迎推荐人Theory 什么是饥饿?,theory,multitasking,Theory,Multitasking,在多任务系统中,某些异常情况会阻止进程或线程的执行。我将把进程和线程简单地称为“进程”。其中两种情况称为死锁和活锁 前者指的是相互阻塞的进程,从而阻止其中一个进程执行。后者指的是相互阻止进程进行,但实际上并不阻止执行的进程。例如,它们可能会不断导致彼此回滚事务,但都无法完成它们 另一种情况称为资源匮乏,在这种情况下,进程进行所需的一个或多个有限资源已被耗尽,除非进程进行,否则无法恢复。这也是活锁的一个特例 我想知道,对于“饥饿”是否还有其他定义,特别是学术定义,而不仅仅限于“资源饥饿”。特别欢迎
而且,不,这不是家庭作业。:-) 工作也是一种资源。当生产者-消费者设置中的工作分配不公平(或不理想)时,某些线程可能无法获得足够的工作项,使其始终处于忙碌状态。想象一下,您在餐厅排队购买食物,孕妇有优先权。而且总是有一群孕妇来 你很快就会饿死的
现在,假设您是一个低优先级流程,而孕妇是高优先级流程 另一个通常出现饥饿或“无限阻塞”的领域是在讨论优先级调度算法时。优先级调度算法有可能让一些低优先级进程无限期地等待。高优先级进程的稳定流可以阻止低优先级进程运行
对于优先级调度器,解决方案是“老化”。老化是一种逐渐增加在系统中等待很长时间的进程优先级的技术。饥饿只是当一个进程或服务没有被服务时,即使系统上没有死锁 这是一个我只是为了澄清而编的例子 想象一下,有一种算法控制计算机访问广域网或类似的东西。这个算法可能有一个策略,上面写着“为那些使用较少带宽的计算机提供优先访问权”。这似乎是一个合适的策略,但是当一台计算机想要访问网络进行ftp上传时会发生什么情况,ftp上传会将数GB的数据发送到某个地方。仅使用此策略,该计算机就会饿死,因为算法永远不会选择该计算机,因为总会有其他计算机请求更小的带宽使用
这就是所谓的饥饿。我不会说资源饥饿是活锁的特例。通常:
- 在livelock中,没有线程取得进展,但它们会继续执行。(在死锁中,他们甚至不继续执行)
- 饥饿时,某些线程确实取得进展,而某些线程没有执行
- 读者和作者的问题。可以同步线程,以便 (1) 读者将能够使作家挨饿 (2) 作家们将使读者挨饿 (3) 不会发生饥饿 (见附件)
- 餐饮哲学家()
HTH一个进程在较长时间内无法获得一个或多个资源。这不是死锁,因为一个进程可以毫无问题地运行。
老化可以用来解决这个问题,每个请求都使用老化因子。在这个主题上,您还应该检查锁车队,它们非常有趣。而且很恶心。即使是作业,这也是我在电视上见过的最好的书面作业问题。荒谬但最好的解释