doukanxi4246 2015-08-26 23:12
浏览 72

Golang-线程在Linux中自动挂起

I've tried to parallelize some calculations for range of uint32 using all CPU cores on my Raspberry PI 2:

...
numcpu := runtime.NumCPU()
runtime.GOMAXPROCS(numcpu) //4 cores
c := make(chan int, numcpu) //buffered channel
results := make([]int, numcpu)
part := math.MaxUint32/numcpu

for i:=0; i<numcpu; i++ {
    go calculate(c,i*part,(i+1)*part,i)
}
for i:=0; i<numcpu; i++ {
    results = append(results,<-c)
}
...

func calculate(c chan int, from, to, i int) {
    ... //calculating result
    c<-result
    println("Goroutine #", i, " stopped") //just for debug
}

But during execution htop shows me that program has 4 subthreads. One of them has no processing time and others are suspended. Could it be that all goroutines migrated to main thread? If it is, how can I prevent it?

Update:

When I cross-compiled binary by the Windows using gox, the problem was solved, despite the fact that performance has rapidly decreased. But why when I using binary built by go build on my RaspPI these subthreads are suspending?

Update:

After updating from standard apt-geted golang v1.03 for Debian Wheezy to golang v1.5 the problems seems to be solved (despite the fact that all.bash cgo-tests was failed). Thank you all for optimization tips. I'm beginner in golang and don't know much about version-specific optimization. But if you still want to inspect code: pastebin

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 Vue3 大型图片数据拖动排序
    • ¥15 划分vlan后不通了
    • ¥15 GDI处理通道视频时总是带有白色锯齿
    • ¥20 用雷电模拟器安装百达屋apk一直闪退
    • ¥15 算能科技20240506咨询(拒绝大模型回答)
    • ¥15 自适应 AR 模型 参数估计Matlab程序
    • ¥100 角动量包络面如何用MATLAB绘制
    • ¥15 merge函数占用内存过大
    • ¥15 使用EMD去噪处理RML2016数据集时候的原理
    • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大