Re: [问题] Golang iterate callback

楼主: yauhh (小y宝贝)   2014-10-10 23:45:06
※ 引述《carylorrk (Cary)》之铭言:
: C++ 可以自定 iterator, 在 golang 想到用 channel 达到类似功能的做法
: http://ideone.com/YwgBm4
: 这样的界面对使用者最方便,combine 里可以直接 iterate result
: 但是会有两个问题:
: 1. 每次会先做完下一个, send to channel 时才卡住,我希望的是如果没有读就不要做
: 2. combiner 中途离开时没有办法很好的关闭 goroutine...
: 虽然可以直接关掉 channel 然后做 recover,但是感觉很不好XD
: 目前我想到的方法是把 callback wrap 起来给 combiner 呼叫
: http://ideone.com/tQ7mbu
: 不过这样 combiner 里需要使用者自己呼叫才能得到结果
: 不知道有没有更好的处理方式?
我觉得,应该是你没把计算模型设定好。本来的计算模型是 producer-to-consummer
(我自己发明的词汇,不要去google),所以你程式是先做出资料,丢出去,然后
下一段流程才去处理资料。
而你需要的计算模型,应该是 request-response 。
接收资料的一端,是 request end 。发送资料的一端则是 response end 。
所以, iterator 是一个 data server ,等待 combiner 下达需求,才开始做。
这一部分是关于你的第一个问题。
至于第二个问题,一来是随着你目前的计算模型而存在,二来,要看在这种偶合力
比较高的计算模型中,是否有机制可以让 combiner 中途结束之前,抛出一个讯息给
iterator ,让它也打算收工。

Links booklink

Contact Us: admin [ a t ] ucptt.com