мьютекс противблокировка вращения при количестве потоков = аппаратный параллелизм

StackOverflow https://stackoverflow.com/questions/4694265

Вопрос

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

[ПРАВИТЬ] некоторые пояснения:поскольку между потоками нет конкуренции за процессорное время, поток может использовать блокировку вращения без какого-либо влияния на производительность другого потока.и spin lock не переключается в режим ожидания, который может быть достаточно тяжелым (по крайней мере, в Windows, idk, как это работает в linux).

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top