SynchronousQueue справедливости - PullRequest
       10

SynchronousQueue справедливости

2 голосов
/ 08 октября 2009

Я использую дизайн 1producer-1consumer в своем приложении, используя SynchronousQueue. В настоящее время я использую его с конструктором по умолчанию (fair = true). И мне интересно, как «справедливо = ложно» повлияет на систему (производительность и особенности параллелизма).

Вот что говорят документы:

SynchronousQueue

public SynchronousQueue ()

Creates a SynchronousQueue with nonfair access policy.

SynchronousQueue

public SynchronousQueue (логическое ярмарка)

Creates a SynchronousQueue with the specified fairness policy.

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

доступ; в противном случае порядок не определено.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 08 октября 2009

Ваш вопрос содержит ответ, более или менее. В любом случае, короткий ответ таков: это не будет иметь никакого значения в вашем случае с одним потребителем (возможно, с бесконечно малым снижением производительности).

Если вы установите флаг fair в значение true, тогда, как вы вставили в свой вопрос, ожидающие потоки конкурируют в порядке FIFO для доступа. Это накладывает определенные ограничения на планирование ожидающих потоков относительно того, как они пробуждаются; недобросовестная система не имеет таких ограничений (и, следовательно, компилятор / среда выполнения могут делать вещи, которые могут работать немного быстрее).

Обратите внимание, что это влияет только на то, какой поток выбран для пробуждения из набора ожидающих потоков; и только с одним потоком, который когда-либо будет ждать, алгоритм решения не имеет значения, поскольку он всегда будет выбирать один и тот же поток. Различие возникает, когда у вас есть несколько потоков, ожидающих - допустимо ли для одного отдельного потока никогда ничего не получить из очереди, если другие потоки могут обрабатывать всю рабочую нагрузку между ними?

1 голос
/ 08 октября 2009

Wrt. производительность, вы пытались измерить это? Скорее всего, это даст вам больше информации о том, что происходит, чем любой ответ здесь.

С Документ :

Справедливость обычно уменьшается пропускная способность, но уменьшает изменчивость и избегает голода

но было бы интересно провести повторяемый тест и изучить, насколько это повлияет на вас и ваши конкретные обстоятельства. Поскольку у вас есть только один потребительский поток, я не думаю, что это повлияет на ваше приложение, за исключением (возможно) незначительного (возможно, незаметного?) Снижения производительности. Но я хотел бы повторить, что вы должны попытаться измерить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...