Re: [cn-clojure:3274] clojure中的 agent的线程和core.async中go的轻线程

68 views
Skip to first unread message

Peter Wu

unread,
Aug 18, 2015, 11:18:32 PM8/18/15
to cn-cl...@googlegroups.com
你举的这个例子,用哪个都没啥卵用。 ------ 数据库连接 --------- 等待------  得到连接-------- 插入数据库----- 等待插入完成 ----- 插入完成。 我们所能利用的就是两个等待的时间里做点其他事情,可是你举的这个例子,并没有去做其他事。

在 2015年8月18日 下午1:12,Xiaojun Weng <wengxia...@gmail.com>写道:
我了解到agent背后是有线程在运行,core.async中go 的是轻线程,我想问下在实际开发中,这个怎么取舍, 什么样的情况下是使用core.async?
什么样的情况下是使用agent?  (我知道两个的功能); 举个列子,如果是连接数据库,插入数据,这个运行开销用那个?谢谢!

--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“CN-Clojure”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到cn-clojure+...@googlegroups.com
要发帖到此群组,请发送电子邮件至cn-cl...@googlegroups.com
访问此群组:http://groups.google.com/group/cn-clojure
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/cn-clojure/594d006c-947f-42e1-adca-52e2e6a1f2ba%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

dennis zhuang

unread,
Aug 19, 2015, 1:20:33 AM8/19/15
to cn-cl...@googlegroups.com
web 开发中,并发模型通常是 web server 决定了,因此你基本用不上这两个东西。




--
庄晓丹
Email:        killm...@gmail.com xzh...@avos.com
Site:           http://fnil.net
Twitter:      @killme2008


Xiaojun Weng

unread,
Aug 19, 2015, 8:52:01 PM8/19/15
to CN-Clojure
谢谢你详细的回复,其实我的意思是两个都是异步操作,但是资源开销的级别不一样(当然jvm 启动可以设置线程的开销大小),我的想了解那个core.async  轻线程到底有多轻? 一般用在啥情况,和 clojure 的future  的区别。

在 2015年8月19日星期三 UTC+8上午11:18:32,Peter Wu写道:
你举的这个例子,用哪个都没啥卵用。 ------ 数据库连接 --------- 等待------  得到连接-------- 插入数据库----- 等待插入完成 ----- 插入完成。 我们所能利用的就是两个等待的时间里做点其他事情,可是你举的这个例子,并没有去做其他事。
在 2015年8月18日 下午1:12,Xiaojun Weng <wengxia...@gmail.com>写道:
我了解到agent背后是有线程在运行,core.async中go 的是轻线程,我想问下在实际开发中,这个怎么取舍, 什么样的情况下是使用core.async?
什么样的情况下是使用agent?  (我知道两个的功能); 举个列子,如果是连接数据库,插入数据,这个运行开销用那个?谢谢!

--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“CN-Clojure”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到cn-clojure+unsubscribe@googlegroups.com

dennis zhuang

unread,
Aug 20, 2015, 12:33:21 AM8/20/15
to cn-cl...@googlegroups.com
core.async 可以自己创建队列( channel 本质是队列),而 agent 默认是内部自带一个队列,并且 1.5 之后可以自定义 agent  线程池,因此理论上两者其实是可以互换的,本质的模型我个人认为也是一样的。

不过 agent 可以跟 STM 结合,而 core.async 可以对队列做更多控制,并且语法上更性感一些,我是相对推荐用core.async,但是如果是一些简单的异步操作,可能 future/pmap/fold 之类更常用一些。

在 2015年8月20日 上午8:52,Xiaojun Weng <wengxia...@gmail.com>写道:
谢谢你详细的回复,其实我的意思是两个都是异步操作,但是资源开销的级别不一样(当然jvm 启动可以设置线程的开销大小),我的想了解那个core.async  轻线程到底有多轻? 一般用在啥情况,和 clojure 的future  的区别。

在 2015年8月19日星期三 UTC+8上午11:18:32,Peter Wu写道:
你举的这个例子,用哪个都没啥卵用。 ------ 数据库连接 --------- 等待------  得到连接-------- 插入数据库----- 等待插入完成 ----- 插入完成。 我们所能利用的就是两个等待的时间里做点其他事情,可是你举的这个例子,并没有去做其他事。
在 2015年8月18日 下午1:12,Xiaojun Weng <wengxia...@gmail.com>写道:
我了解到agent背后是有线程在运行,core.async中go 的是轻线程,我想问下在实际开发中,这个怎么取舍, 什么样的情况下是使用core.async?
什么样的情况下是使用agent?  (我知道两个的功能); 举个列子,如果是连接数据库,插入数据,这个运行开销用那个?谢谢!

--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“CN-Clojure”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到cn-clojure+...@googlegroups.com
要发帖到此群组,请发送电子邮件至cn-cl...@googlegroups.com
访问此群组:http://groups.google.com/group/cn-clojure
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/cn-clojure/594d006c-947f-42e1-adca-52e2e6a1f2ba%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“CN-Clojure”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到cn-clojure+...@googlegroups.com

要发帖到此群组,请发送电子邮件至cn-cl...@googlegroups.com
访问此群组:http://groups.google.com/group/cn-clojure
Reply all
Reply to author
Forward
0 new messages