据我了解:基于目录的系统更多地是以服务器为中心的设计,而侦听则更多地以对等为中心。
这就是为什么基于目录的目录在发生任何未读操作时都需要较少的消息,因为它可以在检查目录后到达具有有效数据的处理器。
监听只是询问每隔n-1个消息的处理器。
因此,基于目录的系统可扩展更多。
现在我的问题是:如果只有一个中央目录,那么当读取错误后有太多处理器询问时,它是否不会成为瓶颈?
如果您要询问的场景是:如果所有(或N-1个)处理器同时发生读未命(通常会生成一条读共享消息)会发生什么情况,那么,所有N-1个处理器将发送一条消息到目录,所有这些都需要响应。实际上,只有当每个处理器都在等待相同的自旋锁时,这种情况才会经常发生。解决方案不是修复一致性协议(尽管有很多选择可以解决此问题),而是使用更好的算法。通常,人们使用基于队列的锁定算法(例如,著名的Mellor-Crummey and Scott锁定算法)。
旋转锁让所有人都感到困惑,同时询问“我们到了吗?”一遍又一遍。使用基于队列的锁,每个人都获得一个号码并排队。然后,当资源可用时,下一个排队的人会通过一个有关私有变量的直接通知来获取它。
只是为了澄清一些问题,尽管在逻辑上(通常)有一个中央目录,但实际上并不是全部都在一个地方。通常,用于特定内存位置的目录条目通常位于处理器上,该处理器具有支持该内存的物理DRAM。