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

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

Susan Sarandon
发布: 2024-11-25 15:54:11
原创
230 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板