Здравствуйте,Есть прототип демона на си++, на данный момент основной поток добавляет клиентов в очередь, а другой поток по сигналу проверяет очередь и обрабатывает клиента. Планировал увеличить количество потоков для обработки клиентов из очереди. Но в этом случае понадобятся мутексы на чтени/запись каждой общей переменной - которых очень много. Причем записи(изменения данных) мало, а чтения общих данных - много. Поэтому буду использовать CREW мутексы (т.е. сколько угодно читающих одновременно переменную, при отсутствии пишуших.)
Вопрос: что будет быстрее работать, много потоков с большим количеством мутексов или один поток без мутексов? склоняюсь к многопоточности. т.к. все же большая часть переменных и объектов, которые будут блокироваться не часто пересекаются между потоками.. но интересно насколько это затратно - вход в критическую секцию и блокировка мютекса на чтение?
Спасибо, может чуть-чуть сумбурно, но все же...
> Здравствуйте,
> Есть прототип демона на си++, на данный момент основной поток добавляет клиентов
> в очередь, а другой поток по сигналу проверяет очередь и обрабатывает
> клиента. Планировал увеличить количество потоков для обработки клиентов из очереди. Но
> в этом случае понадобятся мутексы на чтени/запись каждой общей переменной -
> которых очень много. Причем записи(изменения данных) мало, а чтения общих данных
> - много. Поэтому буду использовать CREW мутексы (т.е. сколько угодно
> читающих одновременно переменную, при отсутствии пишуших.)что такое клиенты у тебя?
каких общих переменных ?
у тебя несколько потоков будут обрабатывать одного и того же клиента?
> что такое клиенты у тебя?
> каких общих переменных ?
> у тебя несколько потоков будут обрабатывать одного и того же клиента?Нет, один поток - один клиент. Клиент - пользователь, который заходит на php часть, посылает запрос демону = и получает от демона ответ, что показать в браузер.
Общие переменные у меня - это части объектов: 1) на какой сайт зашел пользователь (каждый сайт - свой объект, ищится в map по хэшу при запросе) оч. редко сайты могут добавляться. т.е. прийдется для чтения блокировать. 2) на каждого пользователя отдельная сессия заводиться и помещается в map для извлечения каждый раз при запросе от того же пользователя и изменения.как я это вижу, в основном идут блокировки "на всякий случай", потому что от одного и того же пользователя всегда один запрос. можно блокировать весь объект для чтения.
А в случае сайта, есть изменения объекта, например, количество посещений всего всеми пользователями.
пс. по сути решил уже, что буду пробовать многопоточную версию делать. просто хорошо было бы еще как-то придумать, чтобы все эти мютексы можно было бы отключить в любой момент и переключиться на "однопоточную версию" (на самом деле два потока, т.к. первый очередь создает только, с данными не работает, второй обрабатывает) для тестирования.