协程框架的堆栈大小陷阱
来源:互联网 发布:windows用mac的硬盘 编辑:程序博客网 时间:2024/05/21 07:58
昨晚和同事联调我们的开放平台,由于基于协程框架的网关服务器总是在接受两个消息后发生段错误,Core Dump掉,让我们百思不得其解。
查看Dump文件,没有任何有效的调试信息。gdb设置断点调试,程序总是在接受到第二条消息之前,没到断点就崩溃。而日志信息却可以打到在断点之后。搞了一个多小时,真的让我们很崩溃。
最后,到晚上一点多后,我们决定改大一下协程的栈空间大小试试。结果让我们兴奋不已,连续发送了几百条消息,都不会出现任何问题。
优化栈空间后,改回原来的栈空间,也可以正常收发,转发消息。
由此,我们得出结论:
对于协程框架,区别于线程框架,应当尽量使用堆而非栈。这是因为每个协程都会有其自己的栈空间上下文,一旦栈空间上下文不足,使用了过多的栈空间,就会篡改其他协程的栈空间,当其他协程读写被篡改的位置时,就会发生错误。而这种错误,很难被发现。调试很难定位到问题所在。
0 0
- 协程框架的堆栈大小陷阱
- 协程框架的堆栈大小陷阱
- 协程框架的堆栈大小陷阱
- 程序的堆栈大小
- 堆栈大小的设置
- 修改VC6.0堆栈的大小
- 关于线程堆栈大小的注意事项
- 关于线程堆栈大小的注意事项
- 线程堆栈大小 pthread_attr_setstacksize 的使用
- 程序中关于堆栈大小的划定
- 程序中关于堆栈大小的划定
- 大小端与堆栈的生长方向
- 线程堆栈大小 pthread_attr_setstacksize 的使用
- C++如何设置默认堆栈的大小
- 【C++】修改VS2013的默认堆栈大小
- 线程堆栈大小的使用介绍
- 关于线程堆栈大小的注意事项-转
- stm32的堆栈与大小端问题
- akka java api helloworld
- Android中实现全屏、无标题栏的两种办法
- js通过变量获得json数据
- java建造者模式在android上的实践
- Android官方文档翻译 三 1.1Creating an Android Project
- 协程框架的堆栈大小陷阱
- Building Apps with Over 65K Methods
- Trapping Rain Water
- PHP 编译参数
- 教你如何让Mac air在闭合盖子时,系统不会休眠!
- 随机产生的单词文档排序
- spring的aop编程
- 游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
- Python 列表、元组、字典、字符串