IOCP в пользовательском пуле потоков - PullRequest
1 голос
/ 17 декабря 2008

Я сейчас ищу в интернете реализацию пользовательского пула потоков. Я нашел реализацию, которая использует IOCP. Мне интересно, какая польза от их использования? Они обеспечивают кражу работы, или что-то в этом роде, я мог бы действительно найти ответ ...

Ответы [ 3 ]

7 голосов
/ 25 марта 2009

IOCP = "Порт завершения ввода-вывода". Это объект ядра, встроенный в ОС Windows, который дает вам интеллектуальный способ управления многопоточным асинхронным вводом-выводом.

В очень упрощенном (и немного упрощенном) виде вы рассказываете IOCP о тех операциях ввода-вывода, которые вы хотите выполнить. Он будет выполнять их асинхронно и поддерживать очередь результатов каждого из этих заданий. Ваш звонок, чтобы сообщить IOCP о задании, немедленно возвращается (он не блокируется, пока происходит IO). Вам возвращается объект, который концептуально похож на .NET IAsyncResult ... он позволяет блокировать, если вы решите, или вы можете предоставить обратный вызов, или вы можете периодически опрашивать, чтобы увидеть, завершено ли задание.

При выполнении этих работ IOCP использует пул потоков. Пул потоков пытается ограничить количество потоков количеством процессоров или меньше (это настраивается, но намерение и значение по умолчанию - ограничить его количеством процессоров). Однако в IOCP предусмотрено, что иногда задачи в этих потоках могут блокироваться. Задачи Asycn IO не будут блокироваться, но вы, возможно, предоставили это как-то иначе. Таким образом, вы можете присвоить IOCP другое число ... это число потоков выше «обычного максимума», до которого IOCP разрешено подниматься из-за блокировки одного из других потоков. Цель состоит в том, чтобы иметь до «обычного максимума» потоков, которые действительно что-то делают (то есть не блокируются). Если это произойдет, то какое-то время IOCP будет использовать больше потоков, чем обычный максимум, но будет отказываться создавать новые потоки, пока не сможет вернуться к «обычному максимуму».

Это краткое резюме, только концептуальное и, как я уже сказал, в некоторых отношениях слишком упрощенное. Но это должно дать вам общее представление. В книгах Джеффри Рихтера по ОС Windows это подробно освещено (но эти книги уже не издаются). Вы можете найти эти книги в употреблении, и они на самом деле стоят дороже, чем они изначально. Я думаю, что «Advanced Windows» - это название, которое вам нужно, но, возможно, была обновленная версия книги с другим названием.

0 голосов
/ 25 января 2019

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

0 голосов
/ 20 июля 2010

Вы можете использовать реализацию IOCP, если планируете использовать функции ввода-вывода Windows из рабочих потоков. Функция ввода-вывода может быть доступна для чтения / записи на диск или в сеть.

Проверьте Push Framework http://www.pushframework.com, чтобы увидеть использование IOCP для реализации сервера в реальном времени.

...