仓颉、Java、Golang性能测试——带缓存区文件写入
·
版本信息
- 仓颉版本 0.53.18
- Golang版本 1.22.8
- Java版本 corretto-1.8.0_452
源码
仓颉
package cangjie_test
import std.time.MonoTime
import std.sync.SyncCounter
import std.fs.*
import std.io.BufferedOutputStream
main() {
let start = MonoTime.now()
for (i in 1..11) {
write(i)
}
println("耗时: ${(MonoTime.now()-start).toMilliseconds()} ms")
}
func write(index: Int) {
let filePath = "./log_cangjie_with_buffer_${index}.txt"
const rows = 100000
try (file = File(filePath, OpenOption.CreateOrTruncate(true))) {
try (output = BufferedOutputStream(file)) {
for (i in 1..rows + 1) {
output.write("${i}\n".toArray())
}
output.flush()
}
file.flush()
}
}
Java
package java_test;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
public class Main {
public static void main(String[] args) throws Exception {
final long start = System.currentTimeMillis();
for (int i = 1; i < 11; i++) {
write(i);
}
System.out.println(String.format("耗时: %d ms", System.currentTimeMillis() - start));
}
static void write(int index) throws Exception {
final String filePath = "./log_java_with_buffer_" + index + ".txt";
final int rows = 100000;
File file = new File(filePath);
try(FileOutputStream writer = new FileOutputStream(file)){
try(BufferedOutputStream output = new BufferedOutputStream(writer)){
for(int i = 1;i < rows+1;i++) {
output.write((i+"\n").getBytes());
}
output.flush();
}
writer.flush();
}
}
}
Golang
package main
import (
"bufio"
"fmt"
"os"
"time"
)
func main() {
start := time.Now()
for i := 1; i < 11; i++ {
write(i)
}
fmt.Printf("耗时: %d ms\n", time.Now().Sub(start).Milliseconds())
}
func write(index int) {
filePath := fmt.Sprintf("./log_go_with_buffer_%d.txt", index)
const rows = 100000
file, err := os.Create(filePath)
if err != nil {
panic(err)
}
defer file.Close()
output := bufio.NewWriter(file)
for i := 1; i < rows+1; i++ {
output.WriteString(fmt.Sprintf("%d\n", i))
}
output.Flush()
}
结果
| 语言 | 版本 | 结果 |
|---|---|---|
| Java | corretto-1.8.0_452 | 136 ms |
| Golang | 1.22.8 | 80 ms |
| 仓颉 非优化 | 0.53.18 | 196 ms |
| 仓颉 O1优化 | 0.53.18 | 168 ms |
| 仓颉 O2优化 | 0.53.18 | 154 ms |
| 仓颉 Oz优化 | 0.53.18 | 171 ms |
总结
整体而言,Golang对IO操作相当高效,仓颉仍需努力
更多推荐

所有评论(0)