gpt4 book ai didi

java - 同步队列公平性

转载 作者:行者123 更新时间:2023-11-30 07:38:46 24 4
gpt4 key购买 nike

我在使用 SynchronousQueue 的应用程序中使用 1producer-1consumer 设计。到目前为止,我将它与默认构造函数 (fair=true) 一起使用。我想知道“fair=false”将如何影响系统(性能和特别是并发行为)。

Here what the docs tell:

SynchronousQueue

public SynchronousQueue()

Creates a SynchronousQueue with nonfair access policy.

SynchronousQueue

public SynchronousQueue(boolean fair)

Creates a SynchronousQueue with the specified fairness policy.

Parameters:
fair - if true, waiting threads contend in FIFO order for

access; otherwise the order is unspecified.

提前致谢。

最佳答案

您的问题或多或少包含了答案。无论如何,简短的回答是它不会对您的单一消费者情况产生有效影响(性能可能会下降无穷小)。

如果您将 fair 标志设置为 true,那么正如您在问题中粘贴的那样,等待线程会以 FIFO 顺序竞争访问权限。这对等待线程的调度设置了关于它们如何被重新唤醒的特定约束;一个不公平的系统没有这样的约束(因此编译器/运行时可以自由地做一些可能运行得更快的事情)。

请注意,这只会影响从正在等待的线程集中选择唤醒哪个线程;并且只有一个线程永远等待,决策算法是无关紧要的,因为它总是选择同一个线程。当您有多个线程在等待时,区别就来了 - 只要其他线程能够处理它们之间的整个工作负载,一个单独的线程从不从队列中获取任何东西是否可以接受?

关于java - 同步队列公平性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1536943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com