首页 >后端开发 >Python教程 >为什么在 C 中从 stdin 读取行比在 Python 中慢,如何改进?

为什么在 C 中从 stdin 读取行比在 Python 中慢,如何改进?

Susan Sarandon
Susan Sarandon原创
2024-11-25 15:54:11231浏览

Why is Reading Lines from stdin Slower in C   than in Python, and How Can It Be Improved?

与 Python 相比,在 C 中从 stdin 读取行的性能损失

人们可能会惊讶地发现,从 stdin 读取文本行C 比 Python 中的等效操作慢得多。为了解决这种性能差异,让我们深入研究它发生的原因并提供缓解它的解决方案。

C 中的默认设置

默认情况下,C 的 cin 流是与标准输入和输出 (stdio) 同步,导致禁用输入缓冲。这意味着 cin 一次读取一个字符,导致大量的系统调用,这是一个性能瓶颈。

Python 的优化输入处理

相比之下,Python采用优化的输入处理机制,以块的形式缓冲输入,减少系统调用并提高性能。

改进 C 读取性能

为了增强 C 的读取性能,可以采用两种方法:

  1. 禁用 cin 的同步stdio:

    std::cin.sync_with_stdio(false);
  2. 使用 fgets 代替:

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), stdin)) {
        // process line
    }

比较方法

下表比较了各种实现的性能:

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

显然,禁用 cin 同步或使用 fgets 显着提高了 C 的性能,使其与 Python 相当就从标准输入读取行而言。

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

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