Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于demo的sleep.c请教 #34

Closed
xzzh999 opened this issue Jun 2, 2017 · 9 comments
Closed

关于demo的sleep.c请教 #34

xzzh999 opened this issue Jun 2, 2017 · 9 comments
Labels

Comments

@xzzh999
Copy link

xzzh999 commented Jun 2, 2017

你好,大牛,tbox的demo源码的sleep.c执行后开始打印了:

 [demo]: [coroutine: 10]: count: 9, interval: 10 ms
 [demo]: [coroutine: 1000]: count: 9, interval: 10 ms
 [demo]: [coroutine: 2000]: count: 9, interval: 10 ms
 [demo]: [coroutine: 100]: count: 9, interval: 10 ms
 ...

我刚开始接触协程请见谅,有个地方想不通:按我的理解遇到 tb_msleep 后协程切出去了,10 ms超时后其它的协程(100, 1000, 2000 )应该不会执行啊,不应该是 tb_msleep 到时间后才会往后走麽?

@waruqi
Copy link
Member

waruqi commented Jun 2, 2017

@xzzh999 那个demo是个while loop,tb_msleep(10)执行完,打印trace后,就进入下一次tb_msleep(10)了,这个时候其他协程就会执行,也就会打印出来。

@xzzh999
Copy link
Author

xzzh999 commented Jun 2, 2017

@waruqi

tb_msleep(10)执行完进下一次tb_msleep(10)时,会切到其它协程",

这个明白;但是如 coroutine: 100这个协程,tb_msleep(100)应该还没到时间, tb_msleep(100)应该不会返回啊,难道这个 loop 是共享的麽?协程不是都有各自的栈麽?开始的时候应该是如下打印才对啊:

 [demo]: [coroutine: 10]: count: 9, interval: 10 ms
 [demo]: [coroutine: 10]: count: 8, interval: 10 ms
 [demo]: [coroutine: 10]: count: 7, interval: 10 ms
 ...
 [demo]: [coroutine: 10]: count: 0, interval: 10 ms   (从所有协程开始执行到现在有100ms了)
 [demo]: [coroutine: 100]: count: 9, interval: 10 ms
 ...

10ms(打印) -- > 100ms (时间未到再切出去) -- > 10ms(打印) ... -- > 100ms (时间到了,往下走打印)

不知道我的理解错在哪里?

@waruqi
Copy link
Member

waruqi commented Jun 2, 2017

@xzzh999 你好,这里确实有些bug,因为里面针对时间戳进行了缓存优化,初始化的时候存在一些bug,现已修复,你可以尝试更新到master版本,再试下。

@xzzh999
Copy link
Author

xzzh999 commented Jun 3, 2017

@waruqi
好的,谢谢~

@skyformat99
Copy link

大牛牛,看了很多协程库,但是还是没有太搞清楚什么场景下使用?
比如,现在有10万台设备需要采集数据,采集的数据通过sql写入数据库。
如何用协程库来实现呢?谢谢。
还是说,用多个线程,每个线程上再跑协程库了?

@waruqi
Copy link
Member

waruqi commented Jun 3, 2017

@skyformat99 你可以一个线程上去创建多个协程来调度同时写数据库,也可以多个线程。不过写数据库 需要hook底层的io接口,去切换调度,tbox暂时不支持hook操作,你可以找找其他一些协程库来实现。

你可以网上看一些关于协程的使用场景和介绍。。

@skyformat99
Copy link

谢谢解答。
目前来看确实最花费时间的情况是写入数据库。

@waruqi
Copy link
Member

waruqi commented Jun 3, 2017

不客气

@xzzh999
Copy link
Author

xzzh999 commented Jun 5, 2017

master 现在测试是正常的,关闭问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants