Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Порт завершения ввода вывода / 5 сообщений из 5, страница 1 из 1
14.04.2005, 14:13
    #33015958
Patriot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порт завершения ввода вывода
Задача столяла реализовать что-то типа модели массового обслуживания (Есть частые запросы есть несколько потоков их обрабатывающие есть очередь потоков)
Для начала на каждое задание создавал отдельный поток который выполнял это задание .Но затем при большой частоте подачи заданий количество клиентских запросов сильно возрастало , естественно скорость выполнения падала а затем и вовсе вылетала ошибка Out Of Memory что вполне естественно. Для устарнение проблемы воспользовался обьектом порта Завершения ввода вывода , а именно уже готовой реализацией данного механизма ребят из МайкроСофта QueueUserWorkItem . Работает функция вроде бы отлично , но вот слишком она много всего сама делает.
А именно хотелось бы определять Максимальное количество паралельных потоков в пуле самому . Как сказано в документации сказано что она сама создает порт завершения ввода - вывода определяя максимамальное количество потоков равному числу процессоров. Одновременного пользования и ф-й QueueUserWorkItem и при этом менять необходимые параметры .
...
Рейтинг: 0 / 0
14.04.2005, 14:34
    #33016041
Patriot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порт завершения ввода вывода
Вопрос данный вытекает не просто так из любопытства просто есть некоторая проблема :
А именно если пакетов приходит намного больше естественно остаются в очереди задания. И если я выхожу из программы а данная очередь необработана , то программа остается в процессах.А при отладке вообще не закрывается до конца.
Мне думалось что если выходишь из программы то данные потоки либо завершаться либо отработают и завершаться , соотвественно счетчик используемых обьектов ядра обнулится и программы закончит свое существование . Но поведение не совсем ясно.
Может быть кто-то сталкивался с данной проблемой и можно как-то контролировать размер очереди , количество потоков и т.д. проще говоря как-то все это дело обрабатывать чтобы правильно выходить из программы.
...
Рейтинг: 0 / 0
15.04.2005, 11:29
    #33017663
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порт завершения ввода вывода
Может быть написать вручную?
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
15.04.2005, 13:21
    #33018039
Patriot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порт завершения ввода вывода
Как я уже сказал эта функция делает очень много ))) и вполне устраивает ... Если нету возможности конфигурировать уже созданный обьект то придется так и делать.
...
Рейтинг: 0 / 0
18.04.2005, 14:09
    #33021105
Patriot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порт завершения ввода вывода
В общем-то нашел :
Парни из Майкрософта по дефолту делают максимальное количество потоков в пуле равным 512 но при вызове ф-ии QueueUserWorkItem вторым параметром можно передовать не только флаг контроля запуска но и самому формировать его а именно :
#define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) ((Flags)|=(Limit)<<16)
Данный макрос как видно определяет не только флаг но и количество потоков в пуле.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Порт завершения ввода вывода / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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