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

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

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

我收到此错误:

runtime.newproc: function arguments too large for new goroutine

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

谢谢,


慕尼黑8549860
浏览 179回答 3
3回答

富国沪深

不,我不知道。我认为您不应该过于激进地调整以避免复制,但是从源头看来,当参数超过新 goroutine 的可用堆栈空间(应该是千字节)时,会发出此错误。复制开销在那时是真实的,特别是如果这不是这些东西被复制的唯一时间。由于大型结构成员(比如 1kb 数组而不是切片),或者间接地,某些结构可能显式地大于预期。如果没有,只使用一个指针是有意义的,如果你担心创建垃圾,回收指向 using 的结构sync.Pool。

绝地无双

我能够通过更改参数来解决这个问题func doStuff(prev, next User)到func doStuff(prev, next *User)这里@twotwotwo 的回答非常有帮助。

慕慕森

在处理[]BigType大结构的值()列表时遇到了这个问题:for _, stct := range listBigStcts {&nbsp; &nbsp; go func(stct BigType) {&nbsp; &nbsp; &nbsp; &nbsp; ...process stct ...&nbsp; &nbsp; }(stct) // <-- error occurs here}解决方法是替换[]BigType为[]*BigType
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go