Как бы вы объяснили простой смертный о блокировке IO и неблокирующем IO? Я нашел, что эти понятия не очень понятны для многих из нас, программистов.Что такое простые слова, блокирующие IO и неблокирующие IO?
ответ
Блокировка ввода-вывода означает, что выполнение программы приостановлено, когда происходит ввод-вывод. Таким образом, программа ожидает завершения ввода-вывода, а затем продолжит выполнение. В неблокирующем вводе-выводе программа может продолжать работу во время операций ввода-вывода.
просто сказал .. не блокирование ввода/вывода (Asynchronous) позволяет другие операции, которые будут проводиться в то время как он делает свое дело и блокирование ввода/вывода будет блокировать другие операции
Это вопрос параллелизм. В нормальном случае после того, как ядро ОС получает операцию ввода-вывода из пользовательской программы, эта программа не запускается снова до завершения операции ввода-вывода. В то же время другие программы обычно планируются.
Это решает множество проблем. Например, как программа знает, сколько байтов было прочитано, пока не завершится ввод-вывод, когда возвращается read(2)
? Как он знает, может ли он повторно использовать буфер write(2)
, если операция все еще выполняется, когда возвращается write(2)
? Очевидно, что для истинного асинхронного ввода-вывода необходим более сложный интерфейс.
В конечном счете все сводится к:
- I/O происходит синхронно по отношению к программе, путем блокирования программы до ввода/вывод не будет завершен
- ввод/вывод просто запланирован системным вызовом , и существует некоторый механизм уведомления для передачи реального результата.
- Существует компромисс, когда операции ввода-вывода просто сбой, если они не могут быть выполнены немедленно. Это более распространенное использование «неблокирующих» операций ввода-вывода на практике.
Вся проблема осложняется к тому же усилием, чтобы запланировать многопоточные программы, когда I/O, вероятно, может блокировать только одну нить, но это другой вопрос ...
- 1. Что такое io и socket?
- 2. Как работают асинхронные неблокирующие IO-клиенты?
- 3. IO String и IO Data
- 4. Что такое «операция async IO» в .NET?
- 5. Что такое канал в Netty IO?
- 6. Lua file output: что такое -1. # IO?
- 7. Что такое механизм сердцебиения Socket-IO?
- 8. Что такое макрос WITH-STANDARD-IO-SYNTAX?
- 9. Настраиваемые блокирующие и неблокирующие запросы в NIO
- 10. Когда использовать блокирующие и неблокирующие функции?
- 11. Asynchronous IO и Threads
- 12. Что означает обозначение Socket.IO io?
- 13. Что означает название Spring IO?
- 14. Простые, неблокирующие фоновые вызовы
- 15. Mutiproccess IO быстрее многопоточных IO
- 16. Что такое неблокирующие шаблоны проектирования?
- 17. SSLEngine с блокировкой IO
- 18. Akka IO и TestActorRef
- 19. FRP рамки и IO
- 20. Неблокирующие и блокирующие назначения не работают должным образом
- 21. государственных и IO Монада
- 22. Overlapped IO и ERROR_IO_INCOMPLETE
- 23. socket io и cordova
- 24. split IO и вычисление
- 25. EUnit и io: format
- 26. Файл IO и буфер
- 27. Hasql и IO
- 28. Синхронизирующий и IO-файл
- 29. Что такое активность IO, которую поддерживает менеджер IH GHC?
- 30. Фильтр IO [Maybe String] to IO [String]
... и это уведомляются через обратный вызов, когда операция ввода-вывода завершена. Это заставляет вас разрабатывать свои программы по-разному, но сделает их намного лучше. –
@ Лекс, любой пример блокировки и неблокирующей операции? Благодарю. – Kalanidhi
@etc_passwd В JS это просто понять; вызов 'alert();' блокируется, поскольку выполнение приостанавливается до тех пор, пока пользователь не нажмет OK. Вызов AJAX не блокируется, выполнение продолжается, пока отправляется HTTP-запрос. –