C++ 程序在图形shell中比在命令shell中工作得更快
我使用的是一个树莓Pi模型B,带有树莓和内核3.18。 我所做的只是通过一个循环进行执行计算 循环函数如下所示C++ 程序在图形shell中比在命令shell中工作得更快,c++,linux,bash,shell,raspberry-pi,C++,Linux,Bash,Shell,Raspberry Pi,我使用的是一个树莓Pi模型B,带有树莓和内核3.18。 我所做的只是通过一个循环进行执行计算 循环函数如下所示 for(;;) { Timer.get_dt(); ...some print stuff... } 而Timer.get_dt是: 当我从命令shell运行代码时,我得到的循环运行频率为300-350 Hz。当我打开startx,打开一个图形外壳,打开一个终端,然后从那里运行代码时,我得到的频率是原来的数百倍,这似乎更可信 是什么原因导致命令shell运行程序如此缓慢
for(;;) {
Timer.get_dt();
...some print stuff...
}
而Timer.get_dt是:
当我从命令shell运行代码时,我得到的循环运行频率为300-350 Hz。当我打开startx,打开一个图形外壳,打开一个终端,然后从那里运行代码时,我得到的频率是原来的数百倍,这似乎更可信
是什么原因导致命令shell运行程序如此缓慢 这取决于您是通过ssh还是通过将物理屏幕设备插入主板来使用命令shell 一些虚拟控制台有波特率限制;因此,内核可能会尝试模仿一些较慢的终端,包括其速度。虚拟控制台和任何其他tty-s传统上都很慢 您可以使用stty来理解和修改虚拟控制台中的终端设置
顺便说一句,如果您将stdout和/或stderr输出重定向到某个文件,您的程序可能会运行得更快。这取决于您是通过ssh使用命令shell还是通过将物理屏幕设备插入主板 一些虚拟控制台有波特率限制;因此,内核可能会尝试模仿一些较慢的终端,包括其速度。虚拟控制台和任何其他tty-s传统上都很慢 您可以使用stty来理解和修改虚拟控制台中的终端设置
顺便说一句,如果您将stdout和/或stderr输出重定向到某个文件,您的程序可能会运行得更快。到终端(Linux本机终端或X Window终端仿真器)的输出通常都很慢。它还取决于其他因素,如是否通过网络连接、内部缓冲和终端模式以及许多其他因素。要真正了解输出的速度,我建议您尝试检查无缓冲打印(用于标准输出的默认行缓冲)和完全缓冲打印。输出到终端,无论是Linux本机终端还是X窗口终端仿真器,传统上都很慢。它还取决于其他因素,如是否通过网络连接、内部缓冲和终端模式,以及许多其他因素。要真正了解输出的实际速度,我建议您尝试检查无缓冲打印(stdout使用的默认行缓冲)和完全缓冲打印。
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;