Организация пула потоков
От: DMA  
Дата: 21.01.03 21:21
Оценка:
Есть сервис(ATL). Этот сервис обрабатывает клиентские запросы, используя именнованный канал и порт завершения ввода-вывода. Встал вопрос в организации пула потоков на сервисе.
В книге Рихтера есть небольшая заготовка типа:
1) При инициализации службы нужно создать число потоков равное g_nThreadsMin, каждый из которых будет выполнять одну и туже функцию для пула потоков
2) Помимо g_nThreadsMin должно быть установлено предельное значение числа потоков g_nThreadsMax.

В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать. Может кто-нибудь работал с этим. Отзовитесь.
Re: Организация пула потоков
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 21.01.03 21:46
Оценка:
Здравствуйте, DMA, Вы писали:

[]

DMA>В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать. Может кто-нибудь работал с этим. Отзовитесь.


Не совсем понятно о чем идет речь, так как у Рихтера книг много.
Все равно рекомендую прочитать это.
... << RSDN@Home 1.0 beta 5 >>
Re[2]: Организация пула потоков
От: Lexey Россия  
Дата: 22.01.03 11:50
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Не совсем понятно о чем идет речь, так как у Рихтера книг много.

AS>Все равно рекомендую прочитать это.

Можешь еще посмотреть мою статью про написании ISAPI-расширений на этом сайте. Там есть рабочий пример пула. Только размер пула там фиксирован, но при желании сможешь легко допилить его, чтобы он мог ресайзиться.
Re: Организация пула потоков
От: AndreyT  
Дата: 22.01.03 15:17
Оценка:
Здравствуйте, DMA, Вы писали:

DMA>Есть сервис(ATL). Этот сервис обрабатывает клиентские запросы, используя именнованный канал и порт завершения ввода-вывода. Встал вопрос в организации пула потоков на сервисе.

DMA> В книге Рихтера есть небольшая заготовка типа:
DMA>1) При инициализации службы нужно создать число потоков равное g_nThreadsMin, каждый из которых будет выполнять одну и туже функцию для пула потоков
DMA>2) Помимо g_nThreadsMin должно быть установлено предельное значение числа потоков g_nThreadsMax.

DMA>В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать. Может кто-нибудь работал с этим. Отзовитесь.


Можешь посмотреть MS SOAP ToolKit. Самая первая версия распространялась с исходниками. ISAPI extension (собственно SOAP engine) там был с реализацией пула потоков. Очередь запросов была реализована на CompletionPorts.
Re: Организация пула потоков
От: Максим Алексейкин Россия  
Дата: 22.01.03 17:16
Оценка: -1
Здравствуйте, DMA, Вы писали:

DMA>Есть сервис(ATL). Этот сервис обрабатывает клиентские запросы, используя именнованный канал и порт завершения ввода-вывода.

DMA>Встал вопрос в организации пула потоков на сервисе.

Сначала надо придумать как ты данные из канала будешь обрабатывать разными потоками. Как будешь синхронизироваться. И т.д и т.п.
Скорее всего, после обдумывания, ты откажешься от пула потоков.

DMA>1) При инициализации службы нужно создать число потоков равное g_nThreadsMin, каждый из которых будет выполнять одну и туже DMA> функцию для пула потоков


Так и есть, а ещё надо создать объект ядра "порт завершения ввода вывода" и ассоциировать с ним твой именованный канал.

DMA>2) Помимо g_nThreadsMin должно быть установлено предельное значение числа потоков g_nThreadsMax.


Это можно не делать. У Рихтера приведён пример эвристической функции для управления количеством потоков. В простом случае это не надо.

DMA>В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать.


Заготовка какой именно функции?

DMA>Может кто-нибудь работал с этим. Отзовитесь.


Я пробовал применять и все работало. Но позже я от IO completion port отказался, не подошло для моей задачи.

Так что подумай как следует и вопрос сформулируй конкретнее. Успехов.
ICQ #311116826
Re[2]: Организация пула потоков
От: Аноним  
Дата: 23.01.03 20:50
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Здравствуйте, DMA, Вы писали:


AS>[]


DMA>>В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать. Может кто-нибудь работал с этим. Отзовитесь.


AS>Не совсем понятно о чем идет речь, так как у Рихтера книг много.

Наверное почти все из нихе как минимум просматривал. В данном случае я говорил о книге "Программирование серверных приложений для Windows 2000"
AS>Все равно рекомендую прочитать это.
А эту статью(вернее ее русский вариант) я читал в книге тоже Рихтера "Программирование для Windows с учетом специфики 64 разрядной версии"(для профессионалов).
Re[2]: Организация пула потоков
От: DMA  
Дата: 23.01.03 21:06
Оценка:
Здравствуйте, AndreyT, Вы писали:

AT>Здравствуйте, DMA, Вы писали:


DMA>>Есть сервис(ATL). Этот сервис обрабатывает клиентские запросы, используя именнованный канал и порт завершения ввода-вывода. Встал вопрос в организации пула потоков на сервисе.

DMA>> В книге Рихтера есть небольшая заготовка типа:
DMA>>1) При инициализации службы нужно создать число потоков равное g_nThreadsMin, каждый из которых будет выполнять одну и туже функцию для пула потоков
DMA>>2) Помимо g_nThreadsMin должно быть установлено предельное значение числа потоков g_nThreadsMax.

DMA>>В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать. Может кто-нибудь работал с этим. Отзовитесь.


AT>Можешь посмотреть MS SOAP ToolKit. Самая первая версия распространялась с исходниками. ISAPI extension (собственно SOAP engine) там был с реализацией пула потоков. Очередь запросов была реализована на CompletionPorts.

Да было бы очень интересно глянуть, тем более что в рамках всего проекта и с SOAP приходилось разбираться(правда у меня стоит MS SOAP Toolkit Version 3.0). Так что еще раз посмотрел семплы, но ничего с пулом потоков там нет. Если у Вас сохранилась старая версия самого тулкита или семпл ISAPI extension, то буду рад ощутить его у себя на мыле(). Заранее спасибо.
Re[2]: Организация пула потоков
От: DMA  
Дата: 23.01.03 21:16
Оценка:
Здравствуйте, Максим Алексейкин! Спасибо большое за ваш ответ. Вы писали:

МА>Здравствуйте, DMA, Вы писали:


DMA>>Есть сервис(ATL). Этот сервис обрабатывает клиентские запросы, используя именнованный канал и порт завершения ввода-вывода.

DMA>>Встал вопрос в организации пула потоков на сервисе.

МА>Сначала надо придумать как ты данные из канала будешь обрабатывать разными потоками. Как будешь синхронизироваться. И т.д и т.п.

МА>Скорее всего, после обдумывания, ты откажешься от пула потоков.

А насчет того, что данные из канала будут обрабатываться разными потоками. Как будет это синхронизироваться и т.д. В этом как раз и проблема не очень то себе и представляю как.
Я бы отказался, но как говорится было сказано. Значит должно быть сделано.

DMA>>1) При инициализации службы нужно создать число потоков равное g_nThreadsMin, каждый из которых будет выполнять одну и туже DMA> функцию для пула потоков


МА>Так и есть, а ещё надо создать объект ядра "порт завершения ввода вывода" и ассоциировать с ним твой именованный канал.

Для одного именованного канала, ассоциированного с "IO Completion Port" проблем никаких все работает и все классно.

DMA>>2) Помимо g_nThreadsMin должно быть установлено предельное значение числа потоков g_nThreadsMax.


МА>Это можно не делать. У Рихтера приведён пример эвристической функции для управления количеством потоков. В простом случае это не надо.


DMA>>В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать.


МА>Заготовка какой именно функции?

В книге Рихтера и Кларка "Программирование серверных приложений для Windows 2000" ее заготовка определена так DWORD WINAPI ThreadPoolFunc(PVOID pv){} И именно эта функция должна выполняться для всех потоков.

DMA>>Может кто-нибудь работал с этим. Отзовитесь.


МА>Я пробовал применять и все работало. Но позже я от IO completion port отказался, не подошло для моей задачи.


МА>Так что подумай как следует и вопрос сформулируй конкретнее. Успехов.

Раз вы пробовали, то хотелось если не жалко лицезреть ваше творчество. Точнее сказать как удалось вам все это привести в рабочее состояние. С удовольствием получил бы от вас рекомендации на е-мейл
Re: Организация пула потоков
От: Рек Россия  
Дата: 23.01.03 21:27
Оценка:
Здравствуйте, DMA, Вы писали:

DMA>Есть сервис(ATL).

DMA>В книге Рихтера есть заготовка этой функции, но на практике не получается этот пул организовать. Может кто-нибудь работал с этим. Отзовитесь.

Почему не хочешь воспользоваться пользуешься
классом CThreadPool из ATL Server Library ?
Re[3]: Организация пула потоков
От: AndreyT  
Дата: 23.01.03 22:19
Оценка:
Здравствуйте, DMA, Вы писали:

DMA>Да было бы очень интересно глянуть, тем более что в рамках всего проекта и с SOAP приходилось разбираться(правда у меня стоит MS SOAP Toolkit Version 3.0). Так что еще раз посмотрел семплы, но ничего с пулом потоков там нет. Если у Вас сохранилась старая версия самого тулкита или семпл ISAPI extension, то буду рад ощутить его у себя на мыле(). Заранее спасибо.


OK
отправил
Re[4]: Организация пула потоков
От: DMA  
Дата: 24.01.03 06:22
Оценка:
Здравствуйте, AndreyT, Вы писали:

AT>Здравствуйте, DMA, Вы писали:


DMA>>Да было бы очень интересно глянуть, тем более что в рамках всего проекта и с SOAP приходилось разбираться(правда у меня стоит MS SOAP Toolkit Version 3.0). Так что еще раз посмотрел семплы, но ничего с пулом потоков там нет. Если у Вас сохранилась старая версия самого тулкита или семпл ISAPI extension, то буду рад ощутить его у себя на мыле(). Заранее спасибо.


AT>OK

AT>отправил

Спасибо Андрей за присланный исходничек! Попробую к своему сервису прилепить его и посмотреть как это будет работать.
Re[2]: Организация пула потоков
От: DMA  
Дата: 24.01.03 06:28
Оценка:
Здравствуйте, Максим Алексейкин, Вы писали:

МА>Я пробовал применять и все работало. Но позже я от IO completion port отказался, не подошло для моей задачи.


МА>Так что подумай как следует и вопрос сформулируй конкретнее. Успехов.


Хотелось бы все таки увидеть как вам все-таки удалось заставить это дело работать...
Заранее благодарен, Дмитрий Марудов[DMA].
Re[2]: Организация пула потоков
От: DMA  
Дата: 24.01.03 06:29
Оценка:
Здравствуйте, Рек, Вы писали:

Рек>Почему не хочешь воспользоваться пользуешься

Рек>классом CThreadPool из ATL Server Library ?

А что за класс такой? Я гляну, но если вы его применяли на клиент-серверных приложениях для организации пула, то поделитесь ...

С уважением, Дмитрий Марудов!
Re[3]: Организация пула потоков
От: Максим Алексейкин Россия  
Дата: 24.01.03 12:35
Оценка:
Здравствуйте, DMA, Вы писали:
[...]

Реализация была почти как у Рихтера. Данные передавались через сокеты по пакетно. Проблема была именно в том что данные одного пакета могли начать обрабатываться двумя потоками. В данном случае можно было бы использовать пакеты фиксированной длины и выдавать запросы на чтение нужного числа байт. Но у меня пакеты разной длины и обрабатываются КА с памятью. Как прикрутить обработку таких пакетов к IO completion портам я не знаю. На счет исходников, они почти один в один Рихтеровские.
ICQ #311116826
Re[2]: Организация пула потоков
От: Huang Bai Wei Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.02.03 15:18
Оценка:
Здравствуйте, Рек, Вы писали:

Рек>Почему не хочешь воспользоваться пользуешься

Рек>классом CThreadPool из ATL Server Library ?


А где можно подстрелить энтого лося(CThreadPool) ?

В смысле, что за ATL Server Library
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.