juice Asked:2021-11-23 16:01:22 +0000 UTC2021-11-23 16:01:22 +0000 UTC 2021-11-23 16:01:22 +0000 UTC 使用哪种IO方式? 772 在现代代码中应该使用哪种 I/O 方法?据我了解,标准库中有 3 种方式:C-like、C++-threads、C++-without threads。也许还有更多选择(包括在第三方库中)?如果在不同情况下有所不同,那么我希望每种非标准方法至少有一个示例。 c++ 2 个回答 Voted Best Answer Majestio 2021-11-23T16:17:27Z2021-11-23T16:17:27Z 如果 I / O 的速度非常关键 - 最好不要使用库调用,而是使用正在为其编写程序的操作系统的系统调用。因为,所有的库调用都被翻译成系统调用。也许有可能优化得更好(但也有可能让它变得更糟,我们不能忘记它); 如果 I/O 速度不是必需的,最好使用流,因为 它们是最方便编程的; 类 C 的库调用介于项目 1 和项目 2 之间,比系统调用慢一点,比线程快一点。 PS 编程时,一定要记得正确配置 I/O 缓冲,否则方法之间的结果会有很大差异。另一方面,缓冲平衡了速度差异。 有时使用“文件到内存映射”很方便。有优点也有缺点。 Eugene Ryabtsev 2021-11-23T17:09:12Z2021-11-23T17:09:12Z 如果您以小块读取/写入文件,则需要 100% 缓冲。正常 C输入输出正常,C++应该看,但也可以正常。如果大块,那么选项是可能的。 如果某物是网络数据包,那么几乎 100% 最好采用轴给出的内容。在 Windows 上,它可能是 Alertable IO。在 Linux 上,packet_mmap。 线程(它们是线程,而不是流)会减慢速度并使整个事情复杂化。如果收发器与处理器计算高度混合并且单线程代码变得复杂或不适合一个内核,则使用它是有意义的。
PS 编程时,一定要记得正确配置 I/O 缓冲,否则方法之间的结果会有很大差异。另一方面,缓冲平衡了速度差异。
有时使用“文件到内存映射”很方便。有优点也有缺点。
如果您以小块读取/写入文件,则需要 100% 缓冲。正常 C输入输出正常,C++应该看,但也可以正常。如果大块,那么选项是可能的。
如果某物是网络数据包,那么几乎 100% 最好采用轴给出的内容。在 Windows 上,它可能是 Alertable IO。在 Linux 上,packet_mmap。
线程(它们是线程,而不是流)会减慢速度并使整个事情复杂化。如果收发器与处理器计算高度混合并且单线程代码变得复杂或不适合一个内核,则使用它是有意义的。