Итак, что именно означает синхронное мультиплексирование?
Синхронные операции отличаются от асинхронных тем, что первые не позволяют вызывающему абоненту продолжить выполнение до их завершения, а вторые - позволяют. Программное обеспечение (а) синхронность тесно связана с многопоточностью, и основная характеристика select()
, которая делает его работу синхронной, а не асинхронной, заключается в том, что она полностью работает в рамках одного (пользовательского) потока выполнения. Когда вы вызываете select()
, ваш поток блокируется до тех пор, пока один из указанных файловых дескрипторов не станет готовым, или пока не истечет указанный вами тайм-аут.
Альтернативой может быть модель программирования, в которой вы регистрируете интерес к вводу-выводу в файловых дескрипторах, а затем возвращаетесь позже, чтобы проверить, готовы ли они.
Однако следует отметить, что, хотя select()
сам по себе является синхронным, мультиплексирование в основном зависит от программиста. select()
предоставляет средства для достижения этой цели, но сам по себе не выполняет операций ввода-вывода. Главное преимущество заключается в том, чтобы предоставить вам информацию, необходимую для предотвращения блокировки попыток выполнения операций ввода-вывода для одного файлового дескриптора, пока другой дескриптор готов к обслуживанию.
Могу ли я добиться асинхронного ввода-вывода с помощью select?
Нет, select
не делает ничего, чтобы облегчить асинхронный ввод-вывод. Это помогает вам эффективно обрабатывать несколько каналов ввода-вывода через один поток, но этот поток работает синхронно. Тем не менее, это имеет тенденцию быть большим выигрышем, потому что ввод-вывод очень медленный, и эта медленность в основном связана с периферийными устройствами ввода-вывода и носителями, а не с процессором и памятью. Вообще говоря, один поток обладает достаточной вычислительной мощностью для обработки нескольких каналов ввода-вывода, если он разумно выбирает, какие из них обрабатывать при любой возможности, и select()
это облегчает.
person
John Bollinger
schedule
31.07.2019