hukui161
发表于 2015-05-28 18:43
:lol:lol偶像牛牛的
windoze
发表于 2015-08-30 02:23
纯靠看RFC搞定了WebSocket,一堆的坑……
yulihua49
发表于 2015-08-30 19:20
本帖最后由 yulihua49 于 2015-08-30 19:29 编辑
windoze 发表于 2015-08-30 02:23 static/image/common/back.gif
纯靠看RFC搞定了WebSocket,一堆的坑……
这个协程接口还可以吗?支持OSX和X86_64的。
https://swtch.com/libtask/asm.S
swapcontext和makecontext在这:
https://swtch.com/libtask/context.c
OSX已经取消了这个,所以通过这个库来恢复。
wlmqgzm
发表于 2015-10-26 17:46
不错, 楼主的Boost功力很强,一直很佩服, 顶上来.
huxk
发表于 2015-10-27 17:17
好复杂 用起来是危险的
yulihua49
发表于 2017-07-23 08:41
pandaiam 发表于 2014-03-21 16:55
厉害啊,
看不懂的路过。
现在玩这个的太少啦!
我找到libtask的代码啦,ucontext,如果系统不提供,可以用自己的代码啦。似乎里边缺乏arm的代码。
你这个是单线程协程还是多线程的?libtask是单线程的。
yulihua49
发表于 2017-07-24 09:47
我的回复还在隐身中。问楼主你这个是多线程协程吗?
windoze
发表于 2017-07-24 09:50
回复 46# yulihua49
是多线程啊,我记得你不是知道的吗?
yulihua49
发表于 2017-07-24 09:51
本帖最后由 yulihua49 于 2017-07-24 10:02 编辑
windoze 发表于 2017-07-24 09:50
回复 46# yulihua49
是多线程啊,我记得你不是知道的吗?
忘了。多谢。
我的框架是PPC,TPC,Tpool多种模式,只有Tpool模式具有协程。所以应用插件应该透明的支持各种框架。但是这个有困难,PPC可以不用锁,TPC用线程锁,Tpool需要用协程锁。
就如框架底层的RecvNet(),SendNet(),它们根本不知道上层是什么模式,但是要对所有模式兼容。被写成了同步/异步两用的。
yulihua49
发表于 2017-07-24 10:14
本帖最后由 yulihua49 于 2017-07-24 10:21 编辑
windoze 发表于 2014-03-24 11:38
回复 10# linux_c_py_php
Lua那个,我记得你不是在讨论HSHA和LF的区别么?不应该是单线程的啊?
“关于超时,我目前的解决方案是:
1. 每次读写操作都先设置一个timer
2. 读写回调中cancel timer,timer回调中cancel读写操作,但是这个cancel不一定有效,尤其是当你在后面还有一个排队层的时候,有可能回调已经进入了队列,此时就无法撤消了。
3. 读写回调中检查timer回调的结果,timer回调中也要检查读写回调的结果,只有两个回调都被触发之后才算是操作完成。
4. 由于排队层后面是一个线程池,连个回调可能被分派到不同的线程,所以还有一些race condition,目前我是犯懒用ASIO里面的strand解决这个问题, 否则还要做很多额外的工作。
目前这种两个回调的方案会对所有的操作带来额外的开销,所以想看看有没有什么办法。”
----------------------------------------------------------------
这个我用别的办法解决,目前看效果还不错。
只使用一个定时器,监控所有context。每个context都含有若干超时参数,包括时间戳,超时值,状态,超时回调函数。目前是两个。
应用在适当时机设置超时参数,定时器发现超时的,根据其状态从相应队列里删除出来,调用回调函数解脱之。