-4

Мне нужно знать, какой тип управления потоками Windows и Debian / Red Hat используют в своих последних версиях.

Я знаю, что они использовали модель управления потоками от 1 до 1. Они все еще используют эту модель по сей день? Или они изменили это?

1 ответ1

0

Из КП программирования Борада

Win32 API поддерживает модели «один к одному» и «многие ко многим» (в библиотеке потоков и в библиотеке волокон соответственно).

Windows 7, как и все семейство NT, поддерживает Win32 API.

Windows 7 поддерживает потоки ядра. Таким образом, это должна быть модель «один к одному» или модель «многие ко многим». Но на самом деле это гибрид, который поддерживает обе модели. По умолчанию он будет использовать традиционное планирование «один к одному», но в зависимости от количества объектов планирования, доступных для ОС (в зависимости от количества процессоров и ядер), вы можете принудительно использовать его в планировщике «многие ко многим». Сама операционная система никогда не будет переключаться автоматически. Вы должны явно сказать это.

Обратите внимание, что 32-разрядная версия Windows 7 не поддерживает планирование M:N. Только 64-битная версия.

Linux также может поддерживать M:N с помощью таких библиотек, как RIBS2, точно так же, как Windows - через оптоволоконный API.

Гибрид всегда лучше, потому что у вас есть возможность оптимизировать планирование потоков, тогда как раньше у вас был только один выбор. Но использовать фактическое преимущество планировщика «многие ко многим» - это совсем другое дело. Это будет сильно зависеть от вашей потребности в очень большом количестве потоков и от того, что они на самом деле делают. Хотя я не знаю точных деталей, так как я никогда не участвовал в проектах с высокой производительностью, поскольку мне нужно было создавать очень большое количество потоков. Однако я понимаю, что программирование потоков становится проще, но управлять ими становится сложнее. В частности, вы проводите много времени на этапе тестирования, пытаясь оптимизировать ваши потоки для гораздо более сложного планировщика.

Toms Hardware:

До Windows 7 Windows использовала отношение одного к одному пользовательского потока к потоку ядра. Конечно, всегда можно было собрать воедино грубый многозначный пользовательский планировщик (это можно сделать практически во всех ОС с прерываниями таймера на уровне пользователя), но если системный вызов заблокирован в любом из пользовательских потоков, он заблокирует поток ядра и, соответственно, блокировать все другие пользовательские потоки в том же планировщике. Естественно, что модель много к одному не может использовать преимущества SMP.

В Windows 7 Microsoft представила поддержку планирования в пользовательском режиме. Программа может сконфигурировать один или несколько потоков ядра в качестве планировщика (по одному на каждый логический процессор), а затем создать пул потоков пользовательского режима, из которого может извлекать эта UMS. Ядро поддерживает список ожидающих системных вызовов, который позволяет UMS продолжать работу без блокировки потока ядра. Эту конфигурацию можно использовать как много к одному или много ко многим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .