C++中的阻塞和非阻塞I/O的定义和实现
Blocking and Non-blocking I/Os in C++ definition and implementation
最近,由于我正在处理的一个c++项目,我在c++中遇到了非阻塞I/O的概念。如果有人需要一个跨平台的解决方案,那么在不使用boost.asio、libuv和任何相关的外部库的情况下,可以实现非阻塞模式吗?一个例子将非常有助于区分阻塞和非阻塞I/O之间的区别。
I/O——在任何计算意义上——都需要时间。使用该时间的位置取决于I/O操作是"阻塞"还是"非阻塞"。
非阻塞I/O发生在调用线程之外。这通常意味着"繁忙等待"来自I/O的信号,告诉您有数据。
阻塞I/O操作将停止调用线程的执行,直到操作完成。
对于网络套接字:
- 非阻塞读取操作将是"即时"的,您需要轮询套接字以获取有关它是否已完成读取的信息,如果已完成读取,则需要查看已读取数据的大小
- 阻止读取操作将等待数据被读取后再取消等待
对于文件:
类似于网络套接字的情况,只有您从硬件设备读取,因此可能会更快。
至于多线程,这是一个很难处理的问题。根据经验,除非你绝对需要,否则它不应该出现在你的C++术语表中
相关文章:
- 如何正确实现和访问运算符的各种自定义枚举器
- 根据C++标准的定义实现"is_similar"类型特征
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- 它是否定义了哪些算法可以接受可变 lambda 的实现?
- 双链表的自定义实现不起作用(教育)
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 为自定义打印调试实现传递任何类型的变量
- 基于自定义void_t实现的成员检测
- c++ 中的自定义分配器,用于不调用secure_string实现
- C# HashSet VS C++ std::unordered_set 使用自定义类键。C++慢...不可能。如何实现 C# 的速度?
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 如何测试AVL树的自定义实现
- DirectX 12自定义实现与DirectX 11相同
- 可以将STD :: StreamBuf的自定义实现中的异常交付给流用户
- 从链表访问对象(自定义实现)
- C++中 malloc 的自定义实现
- 隐藏类型定义实现
- 自定义实现具有位表示的bool向量-如何实现运算符[]
- 在OpenCV中自定义实现
- c_str() 自定义实现/在每个字符串末尾"="