|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||||||
Spinlock c std::this_thread::yield01.01.2020, 16:17. Показов 5094. Ответов 30
Метки нет (Все метки)
Добрый день, не могу найти обоснование применения функции "уступить другим потокам" при реализации спинлока, хотя нечто подобное есть в релизации boost::detail::spinlock. Я набрался наглости сделать свою реализацию, потомучто моя интуиция подсказывает что она лучше. Но надо ещё всё это обосновать, а я даже не знаю откуда взять информацию. Собственно надо обосновать что после некоторого количества "долбёжек" уместно сделать паузу, и ещё лучше обосновать предел после которого надо делать паузу. Выбранный предел в 100'000 наверняка неоптимальный.
Или не стоит замарачиваться а взять boost::detail::spinlock, но он нормальный в плане производительности или это просто игрушка детская ? Вот моя реализация для случая когда спинлок требуется для синглтона:
Очень много радикальных суждений встречал по поводу спинлока и хочется написать код, который будет воспринят нормально другими разработчиками. Добавлено через 30 минут Небольшие огрешности были. Поправил.
0
|
|||||||||||
| 01.01.2020, 16:17 | |
|
Ответы с готовыми решениями:
30
С++ memory ordering: fetch_sub(acquire) и spinlock на основе atomic_flag (Энтони Вильямс "Мультитрид в действии")
std::string, std::fstream, ошибка кучи |
|
Любитель чаепитий
|
||
| 08.01.2020, 10:59 | ||
|
к тому же спинлок нужен только там, где время блокировки/разблокировки имеет какую-то важность, то есть в высокопроизводительных системах. в прикладных задачах нет никакого смысла использовать их, т.к. саму их необходимость надо доказывать путём бенчмарков, иначе они могут оказаться даже дороже обычного mutex'a.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 09.01.2020, 11:36 | ||||
|
здесь речь идет о скорости выполнения работы программы. "медленные" мьютексы противопоставляются "быстрым" спинлокам. цель бенчмарка - проиллюстрировать: что с "быстрым" спинлоком программа начнет работать хотя бы чуточку, но явно быстрее. сам бенчмарк я запускал на очень мощной машине. для ЦП нагрузка - камаринный укус. бенчмарк показал: спинлок с квадратными колесами лишь замедлил работу программы. Добавлено через 3 минуты процессор зазря греть будет? счет за электричество будет больше, или как? или ты имеешь ввиду, что спинлок в какой нибудь одно-ядерной системе не даст нормально работать другим процессам/тредам, что в целом приведет к замедлению работы всей системы?
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 09.01.2020, 11:48 | ||
|
Покажи код своего бенчмарка. Добавлено через 8 минут Я в своё время делал параллельную сортировку массива, на базе алгоритма быстой сортировки. При использовании спинлока, на std::atomic_flag, она работала быстрее, чем при использовании std::mutex.
0
|
||
|
2737 / 894 / 331
Регистрация: 10.02.2018
Сообщений: 2,136
|
||||||||||||||||||
| 09.01.2020, 14:25 | ||||||||||||||||||
|
Типа тест
Примерное время работы теста на моём компе в миллисекундах:
0
|
||||||||||||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
| 09.01.2020, 14:29 | ||||||
|
Ygg,
0
|
||||||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
| 09.01.2020, 14:34 | |
|
Ygg, а если спинлок с
std::memory_order_acquire/std::memory_order_release захватывать/отпускать?
1
|
|
|
фрилансер
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
|
|
| 09.01.2020, 14:40 | |
|
Ygg, ещё виндовый CRITICAL_SECTION пропущен )
0
|
|
|
2737 / 894 / 331
Регистрация: 10.02.2018
Сообщений: 2,136
|
||||||||||||||||||||
| 09.01.2020, 15:01 | ||||||||||||||||||||
|
Короче, напутал всё во временах. Ещё раз.
Типа тест №2
Время работы в миллисекундах:
0
|
||||||||||||||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 09.01.2020, 16:06 | ||
|
0
|
||
|
Любитель чаепитий
|
|||
| 10.01.2020, 05:52 | |||
|
но, если это время незаметно в прикладных задачах, то в высоконагруженных системах это будет иметь весомую цену, т.к. там все ЦПУ/ядра должны утилизироваться максимально эффективно. и, если код будет построен на спинлоках в тех местах, в которых это не целесообразно, то это может замедлить программу в сравнении с мьютексом. и наоборот. но это произошло, скорее всего, не потому, что ты плохие спинлоки сделал, а потому, что конкретно в том месте программы/бенчмарка это было нецелесообразно. то есть я хочу сказать, что твой бенчмарк лишь доказал то, что конкретно в твоей программе не подходит спинлок, а не то, что он в принципе плохой. хотя, конечно, зависит ещё и от того, как ты его реализовал. p.s. и я не по наслышке говорю это всё. у меня была возможность ощутить прибавку производительности при замене мьютекса на спинлок, но там был самый что ни на есть use case спинлока. и сам спинлок, правда, был не самопальный.
0
|
|||
| 10.01.2020, 05:52 | |
|
Как проинициализировать std::stack<const int> obj ( std::stack<int>{} );
Ошибка: E2034 Cannot convert 'int' to 'std::vector<std::vector<TRabbitCell,std::allocator<TRabbitCell>>... Перевод строк std::string, std::wstring в Unicode (String) This_thread::yield что делает? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|