对于新的goroutine,Golang错误函数参数太大了

时间:2015-01-29 22:12:20

标签: go

我正在使用go 1.4运行程序,我正在尝试将一个大型结构传递给go函数。

go ProcessImpression(network, &logImpression, campaign, actualSpent, partnerAccount, deviceId, otherParams)

我收到此错误:

runtime.newproc: function arguments too large for new goroutine

我已经移动通过引用传递有帮助,但我想知道是否有某种方法在go函数中传递大型结构。

谢谢,

3 个答案:

答案 0 :(得分:1)

不,我都不知道。

我认为你不应该过于激进地进行调整以避免复制,但是当{@ 3}}参数超出新goroutine的可用堆栈空间(应该是千字节)时会发出此错误。复制开销在那时是真实的,特别是如果这不是复制这些东西的唯一时间。由于大型结构成员(比如1kb数组而不是切片)或间接结构成员,也许某些结构显式地大于预期结构。如果没有,只需使用指针就行了,如果你担心创建垃圾,请回收使用from the source指向的结构。

答案 1 :(得分:1)

我能够通过更改参数来解决此问题

func doStuff(prev, next User)

func doStuff(prev, next *User)

here中@twotwotwo的答案非常有帮助。

答案 2 :(得分:0)

在处理大结构的值列表([]BigType)时遇到此问题:

for _, stct := range listBigStcts {
    go func(stct BigType) {
        ...process stct ...
    }(stct) // <-- error occurs here

}

解决方法是将[]BigType替换为[]*BigType