在执行大量I / O的程序中崩溃

时间:2016-02-25 16:28:49

标签: go

我正在尝试与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
    }
}

记录:

  • 我的电脑有4个核心
  • 这是1.5.3

1 个答案:

答案 0 :(得分:1)

@peterSO提到应该总是在Go中检查错误,我应该这样做。