为什么不要频繁创建和停止goroutine
题目来源:新浪
答案1:
频繁的创建和销毁goroutine带来的开销不仅仅是goroutine创建和销毁本身。更大的开销是由于goroutine的Stack初始栈大小只有2K,如果运行过程中调用链比较长,超过的这个大小的时候,栈会自动地扩张。这个时候会调用到一个函数runtime.morestack。开一个goroutine本身开销非常小,但是调用morestack进行扩栈的开销是比较大的。如果函数的栈扩张了,引用原栈上的对象都需要重新改变,指针都要重定位到新的栈。栈越大,涉及到需要调整的对象越多,调用morestack的时候开销也越大