协程框架的堆栈大小陷阱

昨晚和同事联调我们的开放平台,由于基于协程框架的网关服务器总是在接受两个消息后发生段错误,Core Dump掉,让我们百思不得其解。

 

查看Dump文件,没有任何有效的调试信息。gdb设置断点调试,程序总是在接受到第二条消息之前,没到断点就崩溃。而日志信息却可以打到在断点之后。搞了一个多小时,真的让我们很崩溃。

 

最后,到晚上一点多后,我们决定改大一下协程的栈空间大小试试。结果让我们兴奋不已,连续发送了几百条消息,都不会出现任何问题。

优化栈空间后,改回原来的栈空间,也可以正常收发,转发消息。

 

由此,我们得出结论:

对于协程框架,区别于线程框架,应当尽量使用堆而非栈。这是因为每个协程都会有其自己的栈空间上下文,一旦栈空间上下文不足,使用了过多的栈空间,就会篡改其他协程的栈空间,当其他协程读写被篡改的位置时,就会发生错误。而这种错误,很难被发现。调试很难定位到问题所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值