powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тест производительности: CRITICAL_SECTION и SRWLOCK
5 сообщений из 30, страница 2 из 2
Тест производительности: CRITICAL_SECTION и SRWLOCK
    #39588834
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SwitchToThread() не подошел, т.к. он пытается переключиться на ожидающего текущее ядро, в моем случае это не часто.
Спинлок со Sleep(0) лучший вариант. Склоняюсь к тому чтобы поменять на него. Осталось в линуксе потестить.
Исходник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class lite_mutex_t {
	std::atomic_flag _lock = ATOMIC_FLAG_INIT;

public:
	void lock() noexcept {
		while (_lock.test_and_set(std::memory_order_acquire)) Sleep(0);
	}

	void unlock() noexcept {
		_lock.clear(std::memory_order_release);
	}
};


Результат
Блокировка 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+% времени работает независимо от других, т.е. при необходимости устанавливает блокировки на объекты не используемые другими потоками.
Как следствие: замер (в общем смысле) некорректный получился, т.к. задача у меня совсем не среднестатистическая.
...
Рейтинг: 0 / 0
Тест производительности: CRITICAL_SECTION и SRWLOCK
    #39588909
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Надо оставить потоку хотя-бы какое-то время на исполнение полезной работы.
Без этого тест будет... хм.. слишком уж синтетическим.
...
Рейтинг: 0 / 0
Тест производительности: CRITICAL_SECTION и SRWLOCK
    #39588976
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. Надо оставить потоку хотя-бы какое-то время на исполнение полезной работы.
Без этого тест будет... хм.. слишком уж синтетическим.
Это же акторы, там не надо никаких блокировок для выполнения полезной работы, все блокировки происходят во время "бесполезной", т.е. во время работы фрэймворка, обслуживающего акторы: постановка/извлечение сообщений в/из очередей, поиск акторов ожидающих выполнения и запуск и т.д.
В моем тесте "бесполезной" работы слишком много, в реальности ее будет на порядки меньше, т.е. тест с нагрузкой намного выше реальной.
...
Рейтинг: 0 / 0
Тест производительности: CRITICAL_SECTION и SRWLOCK
    #39592034
д0кХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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

:)
...
Рейтинг: 0 / 0
Тест производительности: CRITICAL_SECTION и SRWLOCK
    #39592037
д0кХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторт.к. при записи надо снять блокировку на чтение, поставить блокировку на запись, перепроверить что не было изменений между снятием и постановкой блокировки.


код по тынцу 4220824 создает 2 типа критичеких секций
для чтения и для записи.

Критичекая секция для чтения позволяет паралельно читать всем ( разделяемая блокировка)
но запрещает изменение.
Критическая секция записи - монопольная блокировка, один пишет все прочие ждут.
Любой тип блокировки критическими секциями
устанавливается атомарно, за один системный вызов без каких либо
доп проверок.
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тест производительности: CRITICAL_SECTION и SRWLOCK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]