Programming 板


LINE

※ 引述《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 ,讓它也打算收工。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.159.130
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Programming/M.1412955909.A.8E6.html
1F:推 carylorrk: 確實在 go 中的 channel 主要是 1.34.244.41 10/11 01:06
2F:→ carylorrk: 解決 producer consumer problem,第二 1.34.244.41 10/11 01:07
3F:→ carylorrk: 個限制也是因爲認爲 channel 是否結束 1.34.244.41 10/11 01:08
4F:→ carylorrk: 應由 producer 方決定。所以我主要是想 1.34.244.41 10/11 01:09
5F:→ carylorrk: 問在 go 裏是否有更好的做法。只是 go 1.34.244.41 10/11 01:09
6F:→ carylorrk: 沒有專版,所以只好 PO 來這XD 1.34.244.41 10/11 01:09
7F:→ carylorrk: 嗯...正確來說應該是 CSP 本身就很適合 1.34.244.41 10/11 01:10
8F:→ carylorrk: 解決 producer consumer problem 啦 1.34.244.41 10/11 01:11
9F:→ carylorrk: 簡而言之, go 唯一可以自定 range 1.34.244.41 10/11 01:13
10F:→ carylorrk: expression 行爲的只有 channel,但是 1.34.244.41 10/11 01:13
11F:→ carylorrk: 想不到怎麼把 channel 對應到 request 1.34.244.41 10/11 01:14
12F:→ carylorrk: 當然其實最後的做法沒錯,只要在文件上 1.34.244.41 10/11 01:15
13F:→ carylorrk: 註明就好。只是想問有沒有更好的方式 1.34.244.41 10/11 01:15
14F:→ yauhh: 第一個問題的答案,是要設計為 C/S 模型118.160.159.130 10/11 10:33
15F:→ yauhh: producer-consumer只是 C/S 中的一段。118.160.159.130 10/11 10:34
16F:→ yauhh: 什麼叫做把request對應到channel呢?118.160.159.130 10/11 10:35
17F:→ yauhh: 比方說,HTTP連線不就是一個channel118.160.159.130 10/11 10:36
18F:→ yauhh: 所謂request,不就是以client為producer,118.160.159.130 10/11 10:38
19F:→ yauhh: 並且以server為consumer嗎?118.160.159.130 10/11 10:38
20F:→ carylorrk: well...channel 是 go 語言內建的機制 1.34.244.41 10/11 13:48
21F:→ carylorrk: 並不是一種概念或是模型,所以我才說這 1.34.244.41 10/11 13:53
22F:→ carylorrk: 其實算是語言相關的問題 XD|| 1.34.244.41 10/11 13:53
23F:→ yauhh: 不能只自顧自說coroutine是「內建」 175.96.217.184 10/11 22:59
24F:→ yauhh: 問題就是你有這內建的東西卻做不出你要的。 175.96.217.184 10/11 23:00
25F:→ carylorrk: 不是 coroutine,是 goroutine... 1.34.244.41 10/12 12:19
26F:→ carylorrk: 我就是想不到方法無能爲力了才上來問問 1.34.244.41 10/12 12:20
27F:→ carylorrk: 各位前輩高手囉 orz... 1.34.244.41 10/12 12:20
28F:→ carylorrk: 而且有的時候語言限制就是這樣,我現在 1.34.244.41 10/12 12:22
29F:→ carylorrk: 並不是無法實作出所要的功能,只是想問 1.34.244.41 10/12 12:23
30F:→ carylorrk: 有沒有辦法提供更簡單的界面。就像 C++ 1.34.244.41 10/12 12:23
31F:→ carylorrk: 語言沒有 concept 就只能用 static 1.34.244.41 10/12 12:24
32F:→ carylorrk: assert + MACRO 來模擬,或是沒有 1.34.244.41 10/12 12:25
33F:→ carylorrk: static reflection 就只能用其他方法摸 1.34.244.41 10/12 12:26
34F:→ carylorrk: 擬,但是界面就是比較差比較複雜。 1.34.244.41 10/12 12:26
35F:→ carylorrk: go 裏沒有 generic,所以我只能用 1.34.244.41 10/12 12:26
36F:→ carylorrk: runtime reflection 來勉強渡過... 1.34.244.41 10/12 12:27
37F:→ carylorrk: 因爲語言限制而使界面變複雜甚至無法實 1.34.244.41 10/12 12:32
38F:→ carylorrk: 作也不是什麼罕事。我只是覺得想要達到 1.34.244.41 10/12 12:32
39F:→ carylorrk: 用 range 來 iterate result,而且只有 1.34.244.41 10/12 12:33
40F:→ carylorrk: channel + goroutine(都是 go 特有的, 1.34.244.41 10/12 12:33
41F:→ carylorrk: 而非泛指類似的一般化的概念)才能自定 1.34.244.41 10/12 12:34
42F:→ carylorrk: range expression 的行爲,不像 C++ 可 1.34.244.41 10/12 12:34
43F:→ carylorrk: 以自定 iterator,又卡在提到的那兩點 1.34.244.41 10/12 12:35
44F:→ carylorrk: 上。無法確定這是我不熟語言,還是真的 1.34.244.41 10/12 12:36
45F:→ carylorrk: 無法達成或是有更好更符合 go 的idiom 1.34.244.41 10/12 12:36







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP