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