В настоящее время я ищу в Интернете реализацию пользовательского пула потоков. Я нашел реализацию, которая использует IOCP. Мне интересно, какая польза от их использования? Предусматривают ли они кражу работы или что-то в этом роде, я действительно мог бы найти ответ...
IOCP в пользовательском пуле потоков
Ответы (2)
IOCP = «Порт завершения ввода-вывода». Это объект ядра, встроенный в ОС Windows, который предоставляет вам интеллектуальный способ управления многопоточным асинхронным вводом-выводом.
В очень упрощенных (и немного упрощенных) терминах вы сообщаете IOCP о задачах ввода-вывода, которые вы хотите выполнить. Он будет выполнять их асинхронно и поддерживать очередь результатов каждого из этих заданий. Ваш вызов, чтобы сообщить IOCP о задании, немедленно возвращается (он не блокируется, пока происходит ввод-вывод). Вам возвращается объект, который концептуально похож на .NET IAsyncResult... он позволяет вам блокировать, если вы решите, или вы можете предоставить обратный вызов, или вы можете периодически опрашивать, чтобы увидеть, завершено ли задание.
При выполнении этих заданий IOCP использует пул потоков. Пул потоков пытается ограничить количество потоков количеством процессоров или меньше (это настраивается, но намерение и значение по умолчанию — ограничить количество процессоров). Однако IOCP предусматривает тот факт, что иногда задачи в этих потоках могут блокироваться. Задачи Asycn IO не будут блокироваться, но вы, возможно, предоставили ему какую-то другую задачу. Итак, вы можете дать IOCP другое число... это количество потоков выше «обычного максимума», до которого IOCP разрешено подниматься из-за блокировки одного из других потоков. Цель состоит в том, чтобы иметь до «обычного максимума» потоков, которые действительно что-то делают (т. е. не блокируются). Если это произойдет, то какое-то время IOCP будет использовать больше потоков, чем обычный максимум, но он откажется создавать какие-либо новые потоки, пока не вернется к «обычному максимуму».
Это краткое изложение, чисто концептуальное и, как я уже сказал, в некоторых отношениях чрезмерно упрощенное. Но это должно дать вам общее представление. Об этом подробно рассказывается в книгах Джеффри Рихтера по ОС Windows (но эти книги уже не издаются). Вы можете найти эти книги бывшими в употреблении, и на самом деле они стоят дороже, чем изначально. Я думаю, что «Advanced Windows» — это название, которое вам нужно, но, возможно, существует обновленная версия книги с другим названием.
наилучшее преимущество использования IOCP для пула потоков заключается в том, что он отслеживает свои потоки, и если поток по какой-либо причине блокирует более 100 мс (включая сбой страницы, блокирующий вызов и т. д.), он реализует другой поток, который находился в ожидании из-за достигнутого предела параллелизма. я не знаю внутреннюю реализацию, но я не думаю, что она использует очередь для кражи работы.