对比项目
单线程顺序执行程序,在本地磁盘对文件进行读和写。
写文件
执行步骤:
- 向本地磁盘写1千万行文本。
- 记录写完的时间。
python脚本
import os
import time
file=open("temp-py.txt",'w')
sTime=time.time()
for i in range(int(round(1e8))):#
file.write("helllo worldhelllo worldhelllo worldhelllo worldhelllo worldhelllo worldhelllo worldhelllo world\n")
file.close()
print("cost time:%d/s"%(time.time()-sTime))
go程序
package main
import (
"bufio"
"flag"
"log"
"os"
"time"
)
func main() {
var filePath string
flag.StringVar(&filePath, "f", "", "-f=path/to/your/filePath")
flag.Parse()
if filePath == "" {
filePath = os.Getenv("HOME") + "/temp-go.txt"
}
file, _ := os.Create(filePath)
defer file.Close()
wt := bufio.NewWriter(file)
//写入1百万行数据,11s
sTime := time.Now().UnixNano() / 1e6
for i := 0; i < 1e8; i++ {
_, err := wt.WriteString("helllo worldhelllo worldhelllo worldhelllo worldhelllo worldhelllo worldhelllo worldhelllo world\n")
if err != nil {
log.Println(err)
}
}
wt.Flush()
eTime := time.Now().UnixNano() / 1e6
log.Printf("cost time:%d/ms", (eTime - sTime))
}
最后会在磁盘生成一个9.7GB的文本文件。
耗时:
- python:48s
- go: 27s
读文件
执行步骤:
- 读取前面写入的9.7GB的文本文件。
- 记录遍历完每一行所需要的时间。
Python脚本
import os
import time
file=open("temp-go.txt",'r')
sTime=time.time()
while file.readline():#
pass
file.close()
print("cost time:%d/s"%(time.time()-sTime))
go程序
package main
import (
"bufio"
"log"
"os"
"time"
)
func main() {
filePath := os.Getenv("HOME") + "/temp-go.txt"
file, _ := os.Open(filePath)
sTime := time.Now().Unix()
myscan := bufio.NewScanner(file)
for myscan.Scan() {
}
eTime := time.Now().Unix()
log.Fatalf("cost time:%d/s", (eTime - sTime))
}
执行时间:
- python:42s
- go:27s
总结
在最简单的文件IO层面,go语言已经在性能上对python展现出了压倒性的优势,更不用说go的更厉害的goroutine高并发的特性了。
但是python的优势就是语法简洁,代码量少。
所以:如果要看程序执行效率,还是用go。如果是和人比效率,追求自动化,建议用python。