- 主题:boost/asio的协程调试非常麻烦,有没什么法子
这1000行,有没有1万行的垃圾写法,写两个月,测两个月?
真心求教。
【 在 ylh0315 的大作中提到: 】
: 没办法,这种事情全靠烧脑。
: 我自己写协程,不到1000行代码,调了4个月。晚上睡不着都在想问题在哪儿。自己写的,细节都非常清楚,还这样。
: 靠日志,追踪每个线程和协程的踪迹。日志要说明,哪个线程哪个协程。
: ...................
--
修改:DoorWay FROM 113.137.166.*
FROM 113.137.166.*
这个线程池不用协程实现,会损失性能?
我的想法是,精巧的代码,得想4个月,不如用10000行平常的代码代替。
好调试。
【 在 ylh0315 的大作中提到: 】
: 两天就写完了,是在一个线程池的基础上打补丁,一共1000行,补丁也就二三百行。
: 最难的是那些不易复现的错误。
: 比如,一个协程需要因等待IO而挂起时,把自己的fd排进epoll,恰巧立即被激活了,被另一个线程抓住了,这边还没有swapcontext,那边就resume(setcontext)了。极少发生,必须长时间做压力测试才能发现。
: ...................
--
FROM 113.137.166.*
检查当前线程id,和存储的线程数据?
线程数据里,包含了了协程帧的堆栈信息?
【 在 ylh0315 的大作中提到: 】
: 我的方法是透明的,用户并不知道什么同步异步,只是调用一个Net_Recv函数,一切问题都必须在这个函数里解决。成功了数据就有了,失败就是失败,我只能尽可能的不让它失败。这些多余的动作,我做不了,用户也做不了。用户也不知道进程线程协程啥的。
: 这个函数也可以在多进程多线程多协程等各种模式下工作。
: 函数入口就判断模式,是协程就按异步工作,否则就是同步工作。异步失败就转同步,要尽可能的完成任务,使命必达。黑猫白猫,完成任务就是好猫。
: ...................
--
FROM 61.185.161.*