消费者感觉有问题,生产者生产的0,消费者没有消费到。

来源:11-8 案例:仿 Lua 协程实现非对称协程 API

昨日重现1596341

2020-05-22

课程demo例子日志结果如下:send 0 和receive 0没有成对出现,缺少receive 0换句话说消费者没有消费0。从代码上可以看出,第一次调用消费者consumer.resume(0),消费者协程还没有开启此时调用previousStatus.continuation.resume(Unit)开启协程然后调用yield,此时协程回到了main方法中,继续调用生产者生产出1,伺此后消费者才会调用 (previousStatus as Status.Yielded

).continuation.resume(value)回到消费者协程消费但此时消费的是1.可能我理解的不对,麻烦讲师解答下。

pool-1-thread-1 :send 0
pool-2-thread-1 :start 0
pool-1-thread-1 :send 1
pool-2-thread-1 :receive 1
pool-1-thread-1 :send 2
pool-2-thread-1 :receive 2
pool-1-thread-1 :send 3
pool-2-thread-1 :receive 3
pool-2-thread-1 :receive 200

写回答

3回答

bennyhuo

2020-05-22

第一次调用的时候是作为函数参数的呀,不然start 0是哪儿来的呢?

0
1
昨日重现1596341
0作为函数参数,其他的值通过yield给消费者的,我当时只认为yield返回并日志输出才作为消费过程,0作为函数参数可以理解成第一个被消费的。通过resume给消费者的数据处理方式不太一样所以产生误解
2020-05-23
共1条回复

qq_随心_HJKZ07

2020-05-28

您好,我已购买课程,请问有q 群或者代码资源赠送吗

0
1
昨日重现1596341
课程首页右边有QQ群信息:QQ群:644173029 资源在imooc的git仓库,在课程首页,第二个TAB下载
2020-05-28
共1条回复

bennyhuo

2020-05-22

你的理解应该是对的。

0
0

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1760 学习 · 481 问题

查看课程