【问题标题】:Programm works faster in graphic shell than in command shell程序在图形 shell 中比在命令 shell 中运行得更快
【发布时间】:2015-04-24 11:23:20
【问题描述】:

我正在使用带有 raspbian 和内核 3.18 的 Raspberry Pi 模型 B。 我所做的只是通过执行计算的循环。

循环函数如下所示。

for(;;) {
   Timer.get_dt();
   ...some print stuff...
}

而Timer.get_dt() 是:

oldtime_ = time_;
clock_gettime(CLOCK_MONOTONIC, &time_);
Timer.dt = ((static_cast<int64_t>(time_.tv_sec) * 1000000000 + static_cast<int64_t>(time_.tv_nsec)) - (static_cast<int64_t>(oldtime_.tv_sec) * 1000000000 + static_cast<int64_t>(oldtime_.tv_nsec))) / 1000000000.0;

当我从命令 shell 运行代码时,我会以 300-350 Hz 的频率运行循环。当我去 startx 并打开一个图形外壳,打开一个终端并从那里运行代码时,我得到了数百倍的频率,这似乎更可信。

是什么导致命令shell运行程序这么慢?

【问题讨论】:

  • 输出到终端,无论是 Linux 本机终端还是 X Window 终端仿真器,传统上总是很慢。它还取决于其他因素,例如您是否通过网络连接、内部缓冲和终端模式以及许多其他因素。
  • 要真正了解输出到底有多慢,我建议您尝试检查没有缓冲的打印,stdout 使用的默认行缓冲,以及完全缓冲。

标签: c++ linux bash shell raspberry-pi


【解决方案1】:

这取决于您是通过ssh 使用命令shell 还是通过将物理屏幕设备插入您的电路板。

一些虚拟控制台有波特率限制;所以内核可能会尝试模仿一些缓慢的终端(包括它的速度)。而且虚拟控制台(以及任何其他tty-s)传统上都很慢。

您可以使用stty 来了解和修改您的终端设置(在您的虚拟控制台中)。

顺便说一句,如果您将stdout(和/或stderr)输出重定向到某个文件,您的程序可能会运行得更快。

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 2011-07-18
    • 2015-08-03
    • 2014-06-26
    • 1970-01-01
    • 2014-04-30
    • 2015-10-05
    • 2013-04-16
    相关资源
    最近更新 更多