l**********n 发帖数: 8443 | |
h*i 发帖数: 3446 | 2 都是CSP,一回事吧?
【在 l**********n 的大作中提到】 : ?
|
p*****2 发帖数: 21240 | 3 core.async 差太远了
【在 l**********n 的大作中提到】 : ?
|
l**********n 发帖数: 8443 | 4 有csp的语言可以秒杀node和 thread based 语言such as Java
【在 p*****2 的大作中提到】 : core.async 差太远了
|
p*****2 发帖数: 21240 | 5 node也比core.async强
【在 l**********n 的大作中提到】 : 有csp的语言可以秒杀node和 thread based 语言such as Java
|
l**********n 发帖数: 8443 | 6 node有generator还行。做conditional branching没有好的办法
【在 p*****2 的大作中提到】 : node也比core.async强
|
p*****2 发帖数: 21240 | 7 至少是纯异步的
【在 l**********n 的大作中提到】 : node有generator还行。做conditional branching没有好的办法
|
l**********n 发帖数: 8443 | 8 node还行。单线程没问题,不一定比message passing或者csp复杂
【在 p*****2 的大作中提到】 : 至少是纯异步的
|
p*****2 发帖数: 21240 | 9 core.async像个玩具
【在 l**********n 的大作中提到】 : node还行。单线程没问题,不一定比message passing或者csp复杂
|
l**********n 发帖数: 8443 | 10 必需学go了,clojure的agent和stm scala都有啊。
【在 p*****2 的大作中提到】 : core.async像个玩具
|
|
|
p*****2 发帖数: 21240 | 11 是 现在clj没有什么特别的了
【在 l**********n 的大作中提到】 : 必需学go了,clojure的agent和stm scala都有啊。
|
h*i 发帖数: 3446 | 12 展开说说?
【在 p*****2 的大作中提到】 : core.async像个玩具
|
p*****2 发帖数: 21240 | 13
async要自己做
【在 h*i 的大作中提到】 : 展开说说?
|
h*i 发帖数: 3446 | 14 没用过go, 具体有什么区别?
这片文章似乎认为没有什么区别:
http://blog.drewolson.org/clojure-go-comparison/
【在 p*****2 的大作中提到】 : : async要自己做
|
p*****2 发帖数: 21240 | 15
code没啥区别。但是clj里操作可以是blocking的,go里都是async的。为了保证async
,clj里要做更多的工作,而且也不是很容易。
【在 h*i 的大作中提到】 : 没用过go, 具体有什么区别? : 这片文章似乎认为没有什么区别: : http://blog.drewolson.org/clojure-go-comparison/
|
l**********n 发帖数: 8443 | 16 clj is immutubile
async
【在 p*****2 的大作中提到】 : : code没啥区别。但是clj里操作可以是blocking的,go里都是async的。为了保证async : ,clj里要做更多的工作,而且也不是很容易。
|
p*****2 发帖数: 21240 | 17
你说这个跟我们讨论的有啥关系呢?
【在 l**********n 的大作中提到】 : clj is immutubile : : async
|
l**********n 发帖数: 8443 | 18 so go beats clj?
【在 p*****2 的大作中提到】 : : 你说这个跟我们讨论的有啥关系呢?
|
p*****2 发帖数: 21240 | 19
clj也需要mutability呀。
【在 l**********n 的大作中提到】 : so go beats clj?
|
h*i 发帖数: 3446 | 20 作为一个用户,我不管底层是如何实现的,只要我用起来一样就行了。
具体说到实现的话,Clojure好像是把CSP转换成一个finte state machine来实现async
的。从用户角度,这种实现好像也没有什么损害。
好像没有人benchmark过goroutine和core.async两者的效率区别。可能也没有意义,两
个语言的使用场合完全不同。go是底层系统语言,与C/C++啥的竞争,Clojure是高层的
用来写应用的语言,根本不与C/C++的竞争。
async
【在 p*****2 的大作中提到】 : : clj也需要mutability呀。
|
|
|
h*i 发帖数: 3446 | 21 你说的“更多的工作”Rich Hickey给你都做了,对用户来说,core.async与go
channel没有啥区别,需要写的代码是一一对应的。
async
【在 p*****2 的大作中提到】 : : clj也需要mutability呀。
|
p*****2 发帖数: 21240 | 22
async
用起来肯定不一样呀。
【在 h*i 的大作中提到】 : 作为一个用户,我不管底层是如何实现的,只要我用起来一样就行了。 : 具体说到实现的话,Clojure好像是把CSP转换成一个finte state machine来实现async : 的。从用户角度,这种实现好像也没有什么损害。 : 好像没有人benchmark过goroutine和core.async两者的效率区别。可能也没有意义,两 : 个语言的使用场合完全不同。go是底层系统语言,与C/C++啥的竞争,Clojure是高层的 : 用来写应用的语言,根本不与C/C++的竞争。 : : async
|
h*i 发帖数: 3446 | 23 怎么不一样?我们都看到了,用的时候代码是一样的,那还能有什么不一样?
只能是用到的资源不一样,效率不同。
现在我看了core.async的实现细节(见下面的video),我甚至认为连效率可能都差不多
。core.async的go是一个宏,在编译前就变成了state machine, 没有runtime
overhead, 而且这个state machine是用mutable state实现的,最后编译成jump table
机器码。我相信Go语言的实现也不会比这效率高到哪去。
https://www.youtube.com/watch?v=R3PZMIwXN_g&t=24m46s
【在 p*****2 的大作中提到】 : : async : 用起来肯定不一样呀。
|
p*****2 发帖数: 21240 | 24
table
core.async里的操作可以是block的。你去试试就知道了。主要是性能的差别。
【在 h*i 的大作中提到】 : 怎么不一样?我们都看到了,用的时候代码是一样的,那还能有什么不一样? : 只能是用到的资源不一样,效率不同。 : 现在我看了core.async的实现细节(见下面的video),我甚至认为连效率可能都差不多 : 。core.async的go是一个宏,在编译前就变成了state machine, 没有runtime : overhead, 而且这个state machine是用mutable state实现的,最后编译成jump table : 机器码。我相信Go语言的实现也不会比这效率高到哪去。 : https://www.youtube.com/watch?v=R3PZMIwXN_g&t=24m46s
|
h*i 发帖数: 3446 | 25 core.async可以block,也可以不block,用户自己选择,这是优点不是缺点啊。
在不block的时候,core.async的实现和Go里面的goroutine的实现的几乎是一样的,都
是把状态park在适当的地方,等数据来了把context换过来,继续走。而且数据结构都
是追求lightweight, core.async用一个mutable array, goroutine用一个stack, 我没
看出来性能能够如何不同。
async没有什么magical的,就是个语言内部实现的context switch,不用OS的那一套而
已,这样可以更加lightweight。
【在 p*****2 的大作中提到】 : : table : core.async里的操作可以是block的。你去试试就知道了。主要是性能的差别。
|
p*****2 发帖数: 21240 | 26
go是transparent的,clj需要developer自己去manage。
【在 h*i 的大作中提到】 : core.async可以block,也可以不block,用户自己选择,这是优点不是缺点啊。 : 在不block的时候,core.async的实现和Go里面的goroutine的实现的几乎是一样的,都 : 是把状态park在适当的地方,等数据来了把context换过来,继续走。而且数据结构都 : 是追求lightweight, core.async用一个mutable array, goroutine用一个stack, 我没 : 看出来性能能够如何不同。 : async没有什么magical的,就是个语言内部实现的context switch,不用OS的那一套而 : 已,这样可以更加lightweight。
|
h*i 发帖数: 3446 | 27 人都给出了代码,go和core.async代码对比,完全是一一对应的, 哪来的“clj需要自
己去manage"? manage啥?
http://blog.drewolson.org/clojure-go-comparison/
【在 p*****2 的大作中提到】 : : go是transparent的,clj需要developer自己去manage。
|
p*****2 发帖数: 21240 | 28
你对于async的理解还不是很清楚。clj只是做了一张皮而已。你写写就知道了。或者你
看看有没有什么东西是core.async build的。你去看看代码,在比较一下go的。
【在 h*i 的大作中提到】 : 人都给出了代码,go和core.async代码对比,完全是一一对应的, 哪来的“clj需要自 : 己去manage"? manage啥? : http://blog.drewolson.org/clojure-go-comparison/
|
h*i 发帖数: 3446 | 29 呵呵,我们不是在试图学习么,到底这比一张皮要深邃的东东是个啥?搞了半天你也没
说个道道来。
至于core.async的应用,现在Clojure世界Web编程前端后端几乎都是用core.async,
chan满天飞,有识之士已经在呼吁不要滥用core.async了。
http://www.lispcast.com/core-async-code-style
【在 p*****2 的大作中提到】 : : 你对于async的理解还不是很清楚。clj只是做了一张皮而已。你写写就知道了。或者你 : 看看有没有什么东西是core.async build的。你去看看代码,在比较一下go的。
|
p*****2 发帖数: 21240 | 30 不是说了吗 区别是async要自己管理 go是trasparent的
【在 h*i 的大作中提到】 : 呵呵,我们不是在试图学习么,到底这比一张皮要深邃的东东是个啥?搞了半天你也没 : 说个道道来。 : 至于core.async的应用,现在Clojure世界Web编程前端后端几乎都是用core.async, : chan满天飞,有识之士已经在呼吁不要滥用core.async了。 : http://www.lispcast.com/core-async-code-style
|
|
|
l**********n 发帖数: 8443 | 31 go太恶心了,没有之一
【在 p*****2 的大作中提到】 : 不是说了吗 区别是async要自己管理 go是trasparent的
|
t**r 发帖数: 3428 | 32 没感觉恶心阿?具体说说你哪里觉得它恶心?
【在 l**********n 的大作中提到】 : go太恶心了,没有之一
|
p*****2 发帖数: 21240 | 33
go除了concurrency做的好,其他就是一坨
【在 l**********n 的大作中提到】 : go太恶心了,没有之一
|
p*****2 发帖数: 21240 | 34
error handling
【在 t**r 的大作中提到】 : 没感觉恶心阿?具体说说你哪里觉得它恶心?
|
g*******o 发帖数: 156 | 35 core.async必须要求driver(db or other io) nonblocking。
从程序来看和goroutine是一致了,但是如果你用的driver是blocking的,那效率差了
很多。
【在 h*i 的大作中提到】 : 呵呵,我们不是在试图学习么,到底这比一张皮要深邃的东东是个啥?搞了半天你也没 : 说个道道来。 : 至于core.async的应用,现在Clojure世界Web编程前端后端几乎都是用core.async, : chan满天飞,有识之士已经在呼吁不要滥用core.async了。 : http://www.lispcast.com/core-async-code-style
|
h*i 发帖数: 3446 | 36 goroutine如何不同?
【在 g*******o 的大作中提到】 : core.async必须要求driver(db or other io) nonblocking。 : 从程序来看和goroutine是一致了,但是如果你用的driver是blocking的,那效率差了 : 很多。
|
p*****2 发帖数: 21240 | 37 自动的
【在 h*i 的大作中提到】 : goroutine如何不同?
|
g*******o 发帖数: 156 | 38 goroutine所有的driver都是fiber/micro-thread切换,所以从语言层和效率上看都是
async.
core.async如果使用blocking driver,就需要做thread切换,语言层是async,但是效
率远不行(context switch)。
如果说错了请指正阿:)
【在 h*i 的大作中提到】 : goroutine如何不同?
|
l**********n 发帖数: 8443 | 39 原来这样
【在 g*******o 的大作中提到】 : goroutine所有的driver都是fiber/micro-thread切换,所以从语言层和效率上看都是 : async. : core.async如果使用blocking driver,就需要做thread切换,语言层是async,但是效 : 率远不行(context switch)。 : 如果说错了请指正阿:)
|
h*i 发帖数: 3446 | 40 这只能说明goroutine 适用范围小,要求driver必须是nonblocking的,我问的是,what
if driver是blocking的?你可能回答,go的driver都是基于fiber的。我说,这不就
是limitation么?
core.async不管下面是什么,多线程也好(Java),单线程也好(JavaScript),甚至fiber
也好,对用户来说是透明的,我不需要关心,我一样用,得到一样的async的功能。这
样的好处是巨大的,比如在浏览器端,core.async让clojurescript完全脱离了
callback hell。
至于下面的机制不同,context switch效率不同,这不是废话么,谁都知道。一般来说
,用户更关心能不能的问题,"core.async不管什么环境都能,goroutine 只能在go环
境里能,所以core.async更好"。
无论如何,"core.async is just a toy" is nonsense.
★ 发自iPhone App: ChineseWeb 8.6
【在 g*******o 的大作中提到】 : goroutine所有的driver都是fiber/micro-thread切换,所以从语言层和效率上看都是 : async. : core.async如果使用blocking driver,就需要做thread切换,语言层是async,但是效 : 率远不行(context switch)。 : 如果说错了请指正阿:)
|
|
|
h*i 发帖数: 3446 | 41 It's obvious, you don't know what you are talking about.
★ 发自iPhone App: ChineseWeb 8.6
【在 p*****2 的大作中提到】 : 不是说了吗 区别是async要自己管理 go是trasparent的
|
p*****2 发帖数: 21240 | 42
一看你就没做过high concurrency的东西。
【在 h*i 的大作中提到】 : It's obvious, you don't know what you are talking about. : : ★ 发自iPhone App: ChineseWeb 8.6
|