首页  >  文章  >  后端开发  >  为什么 C 行读取速度比 Python 慢,如何优化?

为什么 C 行读取速度比 Python 慢,如何优化?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-23 19:14:12408浏览

Why is C   Line Reading Slower Than Python, and How Can It Be Optimized?

C 和 Python 中行读取的性能比较:为什么 C 较慢?

当比较使用 C 和 Python 从标准输入读取行的性能时,您可能会发现令人惊讶的是,C 代码的运行速度往往比 Python 代码慢得多。这可以归因于两种语言默认输入/输出 (I/O) 设置的根本差异。

理解 C 的输入/输出特性

默认情况下,C 输入流cin 与标准 I/O (stdio) 系统同步。这意味着 cin 避免任何输入缓冲并根据需要逐字符读取数据。虽然这种方法可以防止将 C I/O 流与 stdio 函数混合时出现潜在问题,但它会带来性能损失,尤其是在读取大量数据时。

Python 的默认输入缓冲

相比之下,Python默认情况下使用缓冲输入。当从 Python 中的标准输入读取时,解释器会以更大的块读取输入,从而减少所需的系统调用数量。缓冲通过最小化与系统调用相关的开销来提高性能,并且可以显着加快输入处理速度。

禁用 C 流同步

要实现与 C 中的 Python 类似的性能,您可以显式禁用同步通过使用 ios_base::sync_with_stdio(false) 方法在 cin 和 stdio 之间进行切换。这允许 cin 独立缓冲输入,从而提高性能。

其他优化:使用 fgets

不要使用 getline(cin, input_line),而是考虑使用 fgets(input_line, sizeof(input_line) ,标准输入)直接。 fgets 是一个 C 函数,它从流中读取一行输入并将其存储在字符数组中。通过避免 cin 流,您可以进一步减少开销并可能提高性能。

比较结果

提供的表格总结了 C 和 Python 中不同方法的行读取速度:

Implementation Lines per Second
Python (default) 3,571,428
cin (default/naive) 819,672
cin (no sync) 12,500,000
fgets 14,285,714
wc (not fair comparison) 54,644,808

从结果中可以明显看出,默认的 C 实现的执行速度明显慢于 Python。但是,通过禁用流同步或直接使用 fgets,您可以在 C 中获得相当或更好的性能。

以上是为什么 C 行读取速度比 Python 慢,如何优化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn