我有以下 Go 代码:
package main
import ("fmt"
"os"
"bufio")
func main() {
reader := bufio.NewReader(os.Stdin)
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
以及以下 Python 代码:
import sys
for ln in sys.stdin:
print ln,
两者都只是从标准输入读取行并打印到标准输出。Python 版本仅使用 Go 版本所需时间的 1/4(在 1600 万行文本文件上测试并输出到 /dev/null)。这是为什么?
更新:按照 JimB 和 siritinga 的建议,我将 Go 的输出更改为缓冲版本。现在 Go 版本要快得多,但仍然比 Python 版本慢 75%。
package main
import ("os"
"bufio")
func main() {
reader := bufio.NewReader(os.Stdin)
scanner := bufio.NewScanner(reader)
writer := bufio.NewWriter(os.Stdout)
for scanner.Scan() {
writer.WriteString(scanner.Text()+"\n")
}
}
波斯汪
相关分类