我写了一个小脚本来根据模式生成电子邮件地址:
<?php
$host = '@gmail.com';
$prefix = 'email';
$total = 200000;
for($i = 0; $i <$total; $i++)
{
echo $prefix . $i . $host . PHP_EOL;
}
现在,如果我将此脚本作为$php generate.php
运行,则需要大约15秒才能完成输出回显。但是,重定向输出($php generate.php > file
)会在一秒钟内完成。
这与PHP的缓冲机制或某些Linux行为的一部分有关吗?
答案 0 :(得分:2)
在任何操作系统上打印到控制台总是要比直接写入文件慢得多,因为输出数据必须经过更多的驱动程序和操作系统操作。 文件操作经过大量优化(缓存!),因此它总是比写入任何可视输出设备快得多。
答案 1 :(得分:1)
这是引起经济放缓的Linux。如果您在Windows控制台中打印输出,也会发生同样的情况。每次刷新输出都要求程序停止,操作系统更新其窗口,并使程序控制再次继续。如果这些冲洗很多并经常发生,那么它确实可能会使速度变慢。
写入文件仍然需要操作系统介入,但除了通常用于读取和写入文件的程序之外,没有任何开销。也就是说,写入控制台是调试程序的一个方便工具,您应该使用它。只需确保它在生产机器上运行时,它会写入文件日志。