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

时间:2014-01-02 02:44:12

标签: javascript windows cmd

在一个巨大的for循环的每次迭代中都有console.log(假设我< 100 000) 影响整体执行速度?

换句话说,如果没有console.log,那么迭代会更快发生吗?

我不是在问是否会有“任何”的差异,但是有一个明显的区别(比如10ms而不是1ms)?

在我的情况下,我说的是Windows命令提示符和javascript

1 个答案:

答案 0 :(得分:6)

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

实际上,写入控制台需要相当长的一段时间。根据控制台的实际情况,时间也会有所不同。因此,正在运行的计算机本地显示器上的文本控制台将比跨网络的ssh链接另一端的控制台快得多。我认为作为远程桌面会话一部分查看的控制台不会比本地控制台更快或更慢--RDP会定期发送整个帧缓冲区,因此它不会试图跟上每个最后的控制台打印。< / p>

有些运行时做有趣的事情。我知道你的问题被标记为Javascript,但请耐心等待。在Linux上的gcc中实现的printf()funtcion打印到stdout,它本身由运行时库通过IPC管道缓冲,这样如果你有多个线程同时调用printf(),那么输出也不会太多严重混乱。通过管道进行缓冲实际上会在一段时间内购买应用程序;管道可以快速吸收文本输出,以便运行时可以继续进行将文本写入屏幕的缓慢业务。我不知道Win32(Windows中所有东西的最终基础)是否做了类似的事情。

因此,如果Javascript运行时是在Linux上的gcc上编译的C / C ++之上构建的,那么除了Javascript运行时添加的任何层之外,还有所有这些层都可以通过。

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

“它是如何在printf()之前打印出来的?在源代码中它们是相反的方式!!!!”

任何基于C / C ++构建的Javascript等运行时也会继承该行为!

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