мьютекс против блокировки вращения, когда число потоков = аппаратный параллелизм - PullRequest
1 голос
/ 14 января 2011

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

[РЕДАКТИРОВАТЬ] некоторые объяснения: поскольку нет разногласий по времени ЦП между потоками, поток может использовать спин-блокировку без какого-либо воздействия на другиепроизводительность потока.и спин блокировка не переключается в режим ожидания, который может быть достаточно тяжелым (по крайней мере, в Windows, аналогично тому, как он работает в Linux)

Ответы [ 3 ]

1 голос
/ 14 января 2011

Ваша предпосылка не очень реалистична.Возможно, ваш процесс имеет оптимальное количество потоков, а остальная часть операционной системы имеет много сотен других потоков.Некоторые из них могут быть готовы к запуску и с удовольствием захватят ядро ​​ЦП, когда ваш поток уступит.Кроме того, если поток собирается быть заблокированным, это может произойти из-за блокировки, удерживаемой одним из других потоков в вашем процессе.Который может выпустить его во время ожидания отжима.Количество потоков не имеет отношения к этому.Таким образом, все еще имеет смысл вращаться в ожидании.

0 голосов
/ 14 января 2011

Spinlock, вероятно, будет более оптимальным, так как нет перехода к ядру. Но сценарий настолько изобретателен, что я бы предложил никогда не пытаться применять его к реальному коду.

0 голосов
/ 14 января 2011

Я думаю, что спинлок будет работать лучше в этом случае, мьютексы на самом деле не нужны, если вы не пытаетесь оптимизировать свой код, и это зависит от разного времени ввода-вывода и т. Д. Вы также хорошо подумали об ожиданиирежим.

...