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/cn.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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP