Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тест производительности: CRITICAL_SECTION и SRWLOCK
|
|||
|---|---|---|---|
|
#18+
SwitchToThread() не подошел, т.к. он пытается переключиться на ожидающего текущее ядро, в моем случае это не часто. Спинлок со Sleep(0) лучший вариант. Склоняюсь к тому чтобы поменять на него. Осталось в линуксе потестить. Исходник Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Результат Блокировка 8 потоков 12 потоков 16 потоковSpin-lock 51.6 34.7 24.6Spin-lock+Sleep(0) 50.5 50.0 49.8std::shared_mutex 43.0 41.0 40.2SRWLOCK 42.2 40.4CRITICAL_SECTION 39.9 38.3std::mutex 28.9 27.6 Перечитал условия теста, подумал: с точки зрения блокировок он однопоточный на 90+%, точнее каждый поток 90+% времени работает независимо от других, т.е. при необходимости устанавливает блокировки на объекты не используемые другими потоками. Как следствие: замер (в общем смысле) некорректный получился, т.к. задача у меня совсем не среднестатистическая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 08:32 |
|
||
|
Тест производительности: CRITICAL_SECTION и SRWLOCK
|
|||
|---|---|---|---|
|
#18+
Да. Надо оставить потоку хотя-бы какое-то время на исполнение полезной работы. Без этого тест будет... хм.. слишком уж синтетическим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 10:33 |
|
||
|
Тест производительности: CRITICAL_SECTION и SRWLOCK
|
|||
|---|---|---|---|
|
#18+
maytonДа. Надо оставить потоку хотя-бы какое-то время на исполнение полезной работы. Без этого тест будет... хм.. слишком уж синтетическим. Это же акторы, там не надо никаких блокировок для выполнения полезной работы, все блокировки происходят во время "бесполезной", т.е. во время работы фрэймворка, обслуживающего акторы: постановка/извлечение сообщений в/из очередей, поиск акторов ожидающих выполнения и запуск и т.д. В моем тесте "бесполезной" работы слишком много, в реальности ее будет на порядки меньше, т.е. тест с нагрузкой намного выше реальной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 11:36 |
|
||
|
Тест производительности: CRITICAL_SECTION и SRWLOCK
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonМы должны упомянуть в топике о справедливости распределения ресурса между потоками. Очередь и т.п. Иначе у читателя может сложится впечатление что SRWLOCK - панацея. В этом плане CRITICAL_SECTION тоже не панацея. https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682530(v=vs.85).aspx There is no guarantee about the order in which waiting threads will acquire ownership of the critical section. PS Попробовал SRWLOCK использовать по полной, т.е. сначала блокировка только на чтение, далее при необходимости блокировка на запись. В моем случае не помогло, т.к. при записи надо снять блокировку на чтение, поставить блокировку на запись, перепроверить что не было изменений между снятием и постановкой блокировки. Все эти манипуляции съедают всю экономию от параллельного чтения. аж захотелось создать топик на тему "Как молоды мы были" 4220824 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 00:54 |
|
||
|
Тест производительности: CRITICAL_SECTION и SRWLOCK
|
|||
|---|---|---|---|
|
#18+
авторт.к. при записи надо снять блокировку на чтение, поставить блокировку на запись, перепроверить что не было изменений между снятием и постановкой блокировки. код по тынцу 4220824 создает 2 типа критичеких секций для чтения и для записи. Критичекая секция для чтения позволяет паралельно читать всем ( разделяемая блокировка) но запрещает изменение. Критическая секция записи - монопольная блокировка, один пишет все прочие ждут. Любой тип блокировки критическими секциями устанавливается атомарно, за один системный вызов без каких либо доп проверок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 01:27 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39588909&tid=2017987]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 290ms |
| total: | 540ms |

| 0 / 0 |
