繁体   English   中英

控制台写入速度是否会影响程序执行速度

[英]Does console write speed affect speed of program execution

在巨大的for循环的每个迭代(让我们说i <100 000)上具有console.log是否会影响整体执行速度?

换句话说,如果没有console.log,迭代会更快地进行吗?

我没有问是否会有“ ANY”差异,但是有明显差异(例如10ms而不是1ms)吗?

就我而言,我在谈论Windows命令提示符和javascript

是的,控制台编写确实会影响程序执行时间。

实际上,写入控制台需要花费相当长的时间。 时间也取决于控制台的实际情况。 因此,运行中的计算机本地显示器上的文本控制台比网络上ssh链接另一端的控制台要快得多。 我认为被视为远程桌面会话一部分的控制台不会比本地控制台快或慢-RDP会定期发送整个帧缓冲区,因此它不会试图跟上每一次控制台打印。

一些运行时会做一些有趣的事情。 我知道您的问题被标记为Javascript,但请耐心等待。 在Linux上的gcc中实现的printf()函数将打印到stdout,它本身由运行时库通过IPC管道进行缓冲,因此,如果您有多个线程,所有线程都同时调用printf(),那么输出就不会太严重混乱。 通过管道进行缓冲实际上可以使应用程序早日购买。 管道可以迅速吸收文本输出,因此运行时可以继续将文本写到屏幕上的繁琐工作。 我不知道Win32(Windows中所有内容的最终基础)是否做类似的事情。

因此,如果Javascript运行时是基于在Linux上gcc上编译的C / C ++之上构建的,那么除了Javascript运行时自身添加的所有层之外,所有其他这些层都需要经过。

在C / C ++ GCC Linux中,stderr不是以这种方式进行缓冲的,它只会直接进入屏幕。 这可能会导致一些令人困惑的情况,例如

任何在C / C ++之上构建的运行时(如Javascript)也将继承该行为!

这似乎也是最近Eclipse在其CDT的编译控制台中弄错了编译器输出顺序的原因。 我认为Eclipse改变了从gcc之类的程序中获取控制台输出的方式,却没有意识到gcc本身是用gcc编译的,不一定会按照严格的“时间”顺序输出stderr和stdout消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM