【发布时间】:2019-12-08 14:19:33
【问题描述】:
我刚刚发现 Go 向文件写入字节很慢。
我想创建一个 10mb 的文件。 Go 大约需要 1 分钟,但在 C 语言中不到 5 秒。
这是 Go 代码:
package main
import (
"fmt"
"os"
)
func main() {
f, _ := os.Create("./src/test/test.txt")
count := int(1.024e7)
for i := 0; i < count; i++ {
f.Write([]byte{byte('a' + i%24)})
}
f.Close()
fmt.Println("ok")
}
和C:
#include <stdio.h>
int main()
{
FILE *fp=fopen("data.txt","w");
int size=1.024e7;
for(int i=0;i<size;i++)
putc('a'+i%24,fp);
fclose(fp);
printf("ok");
return 0;
}
【问题讨论】:
-
Go 默认为无缓冲 I/O。因此,与默认情况下在 C 中获得的不同缓冲行为的迷宫不同,程序员可以选择要使用的缓冲系统。