Недавно из-за проекта C++, с которым я столкнулся, я столкнулся с концепцией неблокирующих операций ввода-вывода на C++. Если кому-то требуется кросс-платформенное решение, можно ли реализовать неблокирующий режим без использования boost.asio, libuv и любой соответствующей внешней библиотеки? Примером может быть очень полезно различать разницу между блокировкой и неблокирующим вводом-выводом.Блокирующие и неблокирующие операции ввода-вывода в C++ определении и реализации
ответ
I/O - в любом вычислительном смысле - требуется время. Где это время используется, определяется, является ли операция ввода-вывода «блокирующей» или «неблокирующей».
Неблокирующий ввод-вывод происходит из вызывающего потока. Обычно это означает «ожидание» для сигнала от ввода-вывода, сообщающего вам, что есть данные.
Блокирование операций ввода-вывода останавливает выполнение вызывающего потока до тех пор, пока операция не будет выполнена.
Для сетевых розеток:
- Неблокирующие операций чтения будет «мгновенным», и вам нужно будет опрашивать сокет для получения информации о том, был ли он закончил чтение, и если да, то размер данных, был прочитан.
- Блокировка операций чтения будет ждать, пока данные не будут прочитаны до того, как их не забудут.
Для файлов:
Аналогичный случай с сетевыми сокетами только вы читаете из аппаратного устройства так что его, вероятно, будет быстрее.
Что касается многопоточности, то это злой зверь, с которым можно работать. Как правило, это не должно быть в вашем словаре терминов C++, если вы в этом не нуждаетесь.
Не могу вспомнить последний раз, когда мне приходилось кодировать «Занят ждать» .Это не обычный способ делать вещи. Кроме того, что именно вы подразумеваете под «*, вам нужно будет опросить сокет для получения информации о том, закончил ли он чтение, и если да, то размер данных, которые Вашингтон s read * "? – melpomene
Если честно, у меня нет коммерческого или профессионального опыта. Я использовал сетевые сокеты из SFML (Simple/Fast Media Library), и если вы решили использовать неблокирующий сокет, вам нужно вызвать функцию, чтобы вернуть статус сокета. Что касается оживленного ожидания, то из моего опыта я использовал один для Open Steamworks для обработки событий. – Gambit
- 1. termios VMIN VTIME и блокирующие/неблокирующие операции чтения
- 2. Настраиваемые блокирующие и неблокирующие запросы в NIO
- 3. Блокирующие операции и ZeroMQ
- 4. Когда использовать блокирующие и неблокирующие функции?
- 5. Блокирующие блокировки и блокирующие блокировки
- 6. Неблокирующие и блокирующие назначения не работают должным образом
- 7. Что такое простые слова, блокирующие IO и неблокирующие IO?
- 8. пространство имен в определении и реализации
- 9. две блокирующие операции в одном процессе
- 10. Неблокирующие операции канала в режиме go. Послать?
- 11. Почему я должен использовать неблокирующие или блокирующие сокеты?
- 12. Неблокирующие сокеты и отправка()
- 13. Embedded Python - Блокирующие операции во временном модуле
- 14. Семафоры, блокирующие и разблокирующие
- 15. C++ boost :: thread и автоматически блокирующие контейнеры
- 16. неблокирующие записи в c
- 17. Неблокирующие сообщения и недостатки DllImport
- 18. Вопрос об определении и определении
- 19. Неблокирующие сокеты SSL и NIO
- 20. Неблокирующие семафоры в C++ 11?
- 21. Реализации и исключения для C#
- 22. Блокирующие группы потоков в C#
- 23. Неблокирующие одновременно присвоения проводов и регистров в Verilog
- 24. Чтение и запись реализации атомной операции в ядре Linux
- 25. Неблокирующие Winsockets C++ странные задержки
- 26. Биты операции реализации
- 27. C++ 2D вектор и операции
- 28. Интерфейсы и реализации Objective-c
- 29. inline в определении и декларации
- 30. Операции C Программирование И значение
«I/O» - это не вещь; вы, вероятно, имеете в виду I/O. – melpomene
Что именно вы подразумеваете под «STL»? – melpomene
Неблокирующий ввод-вывод и потоки являются ортогональными: вы можете иметь как с, так и без другого. – melpomene