The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Многопоточная обработка клиентов или нет"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Демоны, Сигналы)
Изначальное сообщение [ Отслеживать ]

"Многопоточная обработка клиентов или нет"  +/
Сообщение от flexik (ok) on 20-Июл-11, 12:26 
Здравствуйте,

Есть прототип демона на си++, на данный момент основной поток добавляет клиентов в очередь, а другой поток по сигналу проверяет очередь и обрабатывает клиента. Планировал увеличить количество потоков для обработки клиентов из очереди. Но в этом случае понадобятся мутексы на чтени/запись каждой общей переменной - которых очень много. Причем записи(изменения данных) мало, а чтения общих данных - много. Поэтому буду использовать CREW мутексы  (т.е. сколько угодно читающих одновременно переменную, при отсутствии пишуших.)

Вопрос: что будет быстрее работать, много потоков с большим количеством мутексов или один поток без мутексов? склоняюсь к многопоточности. т.к. все же большая часть переменных и объектов, которые будут блокироваться не часто пересекаются между потоками.. но интересно насколько это затратно - вход в критическую секцию и блокировка мютекса на чтение?

Спасибо, может чуть-чуть сумбурно, но все же...

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Многопоточная обработка клиентов или нет"  +/
Сообщение от Alex_S (??) on 22-Июл-11, 07:43 
> Здравствуйте,
> Есть прототип демона на си++, на данный момент основной поток добавляет клиентов
> в очередь, а другой поток по сигналу проверяет очередь и обрабатывает
> клиента. Планировал увеличить количество потоков для обработки клиентов из очереди. Но
> в этом случае понадобятся мутексы на чтени/запись каждой общей переменной -
> которых очень много. Причем записи(изменения данных) мало, а чтения общих данных
> - много. Поэтому буду использовать CREW мутексы  (т.е. сколько угодно
> читающих одновременно переменную, при отсутствии пишуших.)

что такое клиенты у тебя?
каких общих переменных ?
у тебя несколько потоков будут обрабатывать одного и того же клиента?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Многопоточная обработка клиентов или нет"  +/
Сообщение от flexik (ok) on 22-Июл-11, 12:22 
> что такое клиенты у тебя?
> каких общих переменных ?
> у тебя несколько потоков будут обрабатывать одного и того же клиента?

Нет, один поток - один клиент. Клиент - пользователь, который заходит на php часть, посылает запрос демону = и получает от демона ответ, что показать в браузер.
Общие переменные у меня - это части объектов: 1) на какой сайт зашел пользователь (каждый сайт - свой объект, ищится в map по хэшу при запросе) оч. редко сайты могут добавляться. т.е. прийдется для чтения блокировать. 2) на каждого пользователя отдельная сессия заводиться и помещается в map для извлечения каждый раз при запросе от того же пользователя и изменения.

как я это вижу, в основном идут блокировки "на всякий случай", потому что от одного и того же пользователя всегда один запрос. можно блокировать весь объект для чтения.

А в случае сайта, есть изменения объекта, например, количество посещений всего всеми пользователями.

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру