我正在尝试与Go并行写入100000个文件。
我不知道为什么,但是当我使用argv参数“100000”调用它时,下面的代码会崩溃~30%。
这是崩溃:
goroutine 3749 [chan send]:
main.CallShellCommand(0xc820016180, 0xea1)
.../parallel.go:13 +0x1bf
created by main.main
.../parallel.go:22 +0xbd
以下是代码:
package main
import "fmt"
import "io/ioutil"
import "strconv"
import "os"
import "runtime"
func CallCommand(ch chan struct{}, id int) {
ioutil.WriteFile(fmt.Sprintf("/tmp/my_prefix_%d", id), []byte("HELLO\n"), 0644)
ch <- struct{}{}
}
func main() {
runtime.GOMAXPROCS(4)
n, _ := strconv.Atoi(os.Args[1])
ch := make(chan struct{})
for i := 0; i < n; i++ {
go CallCommand(ch, i+1)
}
for j := 0; j < n; j++ {
<-ch
}
}
记录:
答案 0 :(得分:1)
@peterSO提到应该总是在Go中检查错误,我应该这样做。