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


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