使用goroutine调用非goroutine函数

时间:2015-10-01 18:20:00

标签: go

我有一个脚本的一部分,格式如下:

func main() {
  for i=0;i<1000000;i++ {
    go test()
  }
}
func test() {
    a := test2()
}
func test2()(var int) {
    //a bunch of operations
    return var
}

我运行了很多迭代,它总能工作。我想知道是否有两个或更多goroutines同时调用函数“test2()”并导致崩溃的可能性?以下格式是否比前一格式更好?

func main() {
    for i=0;i<1000000;i++ {
        go test()
    }
}
func test() {
    test2 := func()(var int){
        //a bunch of operations
        return var
    }
    a := test2()
}

非常感谢!

1 个答案:

答案 0 :(得分:2)

不,您的功能不会崩溃,除非您的代码出现问题(即除以零)或明确调用$(document).ready(function (){ var table = $('#example').DataTable(); table.rows().every( function ( rowIdx, tableLoop, rowLoop ) { var data = this.data(); console.log(data); data[0] = '* ' + data[0]; this.data(data); }); }); 。如果它不访问任何字段(或其文档未指定它们可能同时调用的方法),那么您的函数是thread-safe

编辑:第一个代码更好。虽然两者应该具有非常相似的性能,但由于它们运行相同的代码,因此第一个更易于阅读。您的第二个代码块可能会有一个小的性能损失,因为您多次定义一个函数,但这可能会被编译器优化掉。