共享就绪队列是否可以限制多处理器系统的可伸缩性?

时间:2009-11-28 16:35:53

标签: operating-system scheduling

共享就绪队列是否会限制多处理器系统的可伸缩性?

2 个答案:

答案 0 :(得分:0)

简单地说,最绝对的。请继续阅读以进行讨论。

调整服务是一种艺术形式或需要基准测试(并且您需要进行基准测试的概念量空间很大)。我认为这取决于以下因素(这不是详尽无遗的)。

  1. 从准备好的qeueue中拾取的物品需要多长时间才能处理,
  2. 他们有多少工人线程?
  3. 他们有多少生产者,他们经常生产多少?
  4. 您使用的是什么类型的等待概念?自旋锁或内核等待(后者更慢)?
  5. 因此,如果经常生成项目,并且线程数量很大,并且处理时间很短:数据结构可以锁定大窗口,从而导致颠簸。

    其他因素可能包括使用的数据结构以及为-eg锁定数据结构的时间,如果您使用链接列表来管理此类队列,则addremove操作会占用一定的时间。当项目为added时,prio-queue(堆)平均需要更多操作。

    如果您的系统用于业务处理,您只需使用以下内容即可将此问题排除在外:

    1. 基于流程的架构,只是产生多个生产者消费者流程并使用文件系统进行通信,
    2. 使用非preemtive协作线程编程语言,如stackless python,Lua或Erlang。
    3. 另请注意:同步原语会导致处理器间缓存内聚泛滥,not good因此应谨慎使用。

      讨论可以继续填写博士论文:D

答案 1 :(得分:0)

每个cpu就绪队列是数据结构的自然选择。这是因为,大多数操作系统都会尝试将进程保留在同一个CPU上,出于多种原因,您可以谷歌搜索。这意味着什么?如果线程已就绪并且另一个CPU处于空闲状态,则OS不会将线程快速迁移到另一个CPU。负载平衡仅在长期内发挥作用。

如果情况不同,那就是保持线程cpu亲和力不是设计目标,而是线程迁移频繁,然后保持单独的每个cpu运行队列将是昂贵的。