由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - go channel和clojure core.async哪个好
相关主题
对 (im)mutability 的误解和深度理解又看了一下go
说了半天异步是大势所趋没什么疑问了写backend的朋友还是可以关注一下golang
FP更接近人的思维python下怎么解决GIL?
FP的死穴还是性能FP的好处是不是就是Concurrency?
scala并发goodbug吃数据库应用开发饭的,根本不懂UI,牛逼吹得最大
Node 完胜 Ruby呀看了一下Meteor很不错
core java里有跟C++ std::async类似的东西吗?读了1-2小时的Go评论
这次node把python也给干了关于Go
相关话题的讨论汇总
话题: async话题: go话题: clj话题: goroutine话题: clojure
进入Programming版参与讨论
1 (共1页)
l**********n
发帖数: 8443
1
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像个玩具
相关主题
Node 完胜 Ruby呀又看了一下go
core java里有跟C++ std::async类似的东西吗?写backend的朋友还是可以关注一下golang
这次node把python也给干了python下怎么解决GIL?
进入Programming版参与讨论
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呀。

相关主题
FP的好处是不是就是Concurrency?读了1-2小时的Go评论
goodbug吃数据库应用开发饭的,根本不懂UI,牛逼吹得最大关于Go
看了一下Meteor很不错从coffee,scala等到golang效率下降了好几倍
进入Programming版参与讨论
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

相关主题
这次Clojure把Scala给干了说了半天异步是大势所趋没什么疑问了
支持我的JS OOP观点的文章来了FP更接近人的思维
对 (im)mutability 的误解和深度理解FP的死穴还是性能
进入Programming版参与讨论
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)。
: 如果说错了请指正阿:)

相关主题
FP的死穴还是性能core java里有跟C++ std::async类似的东西吗?
scala并发这次node把python也给干了
Node 完胜 Ruby呀又看了一下go
进入Programming版参与讨论
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

1 (共1页)
进入Programming版参与讨论
相关主题
关于Goscala并发
从coffee,scala等到golang效率下降了好几倍Node 完胜 Ruby呀
这次Clojure把Scala给干了core java里有跟C++ std::async类似的东西吗?
支持我的JS OOP观点的文章来了这次node把python也给干了
对 (im)mutability 的误解和深度理解又看了一下go
说了半天异步是大势所趋没什么疑问了写backend的朋友还是可以关注一下golang
FP更接近人的思维python下怎么解决GIL?
FP的死穴还是性能FP的好处是不是就是Concurrency?
相关话题的讨论汇总
话题: async话题: go话题: clj话题: goroutine话题: clojure