我在Scala(源代码)(Scala 2.8 RC7)和Clojure(源代码)(Clojure 1.1)中编写了一个环网络拓扑模拟,用于比较Actors和Agents.
虽然Scala版本显示几乎恒定的消息交换率,因为我将网络中的节点数从100增加到1000000,但Clojure版本显示的消息速率随着节点数量的增加而减少.同样在单次运行期间,Clojure版本中的消息速率随着时间的推移而降低.
所以我很好奇Scala的演员如何与Clojure的特工比较?Agent本身是否比Actors更少并发或代码编写效率低(autoboxing?)?
PS:我注意到Scala版本中的内存使用量随着节点数量的增加(100万个节点> 500 MB)而增加很多,而Clojure版本使用的内存要少得多(100万个节点约100 MB).
编辑:
这两个版本都在相同的JVM上运行,并且所有JVM参数和Actor和Agent配置参数都设置为默认值.在我的机器上,Scala版本为100到100万个节点提供了大约5000个消息/秒的消息速率,而Clojure版本以100个节点的60000消息/秒开始,对于100万个节点减少到200个消息/秒.
编辑2
事实证明我的Clojure版本编写效率低下.我将nodes集合的类型更改list为vector,现在它显示了一致的行为:100个节点100000消息/秒,100000个节点80000消息/秒.所以Clojure Agent似乎比Scala Actors更快.我也更新了链接的来源.
Clojure API将这两个函数描述为:
(发送af&args) - 向代理商发送行动.立即返回代理.随后,在来自线程池的线程中,代理的状态将设置为以下值:(应用action-fn state-of-agent args)
和
(发送af&args) - 向代理发送可能阻止的操作.立即返回代理.随后,在单独的线程中,代理的状态将设置为以下值:(应用action-fn state-of-agent args)
唯一明显的区别是当动作可能阻止时应该使用send-off.有人可以更详细地解释这种功能差异吗?
下面是一个示例robots.txt文件,允许多个用户代理为每个用户代理提供多个爬网延迟.抓取延迟值仅用于说明目的,并且在真实的robots.txt文件中会有所不同.
我已经在网上搜索了正确的答案,但找不到一个.有太多混合的建议,我不知道哪个是正确/正确的方法.
问题:
(1)每个用户代理都可以拥有自己的抓取延迟吗?(我假设是的)
(2)在Allow/Dissallow行之前或之后,您在哪里为每个用户代理放置了爬行延迟行?
(3)每个用户代理组之间是否必须有空白.
参考文献:
http://www.seopt.com/2013/01/robots-text-file/
http://help.yandex.com/webmaster/?id=1113851#1113858
基本上,我希望找出最终robots.txt文件应该如何使用下面示例中的值.
提前致谢.
# Allow only major search spiders
User-agent: Mediapartners-Google
Disallow:
Crawl-delay: 11
User-agent: Googlebot
Disallow:
Crawl-delay: 12
User-agent: Adsbot-Google
Disallow:
Crawl-delay: 13
User-agent: Googlebot-Image
Disallow:
Crawl-delay: 14
User-agent: Googlebot-Mobile
Disallow:
Crawl-delay: 15
User-agent: MSNBot
Disallow:
Crawl-delay: 16
User-agent: bingbot
Disallow:
Crawl-delay: 17
User-agent: Slurp
Disallow:
Crawl-delay: 18
User-agent: Yahoo! Slurp
Disallow:
Crawl-delay: 19
# Block all other spiders
User-agent: *
Disallow: /
# Block …Run Code Online (Sandbox Code Playgroud) 在玩F#代理后,我尝试使用它们来减少地图.
我使用的基本结构是:
我想知道的问题是:
非常感谢,
type Agent<'T> = MailboxProcessor<'T>
//This is the response the supervisor
//gives to the worker request for work
type 'work SupervisorResponse =
| Work of 'work //a piece of work
| NoWork//no work left to do
//This is the message to the supervisor
type 'work WorkMsg =
| ToDo of 'work //piles up work in the Supervisor queue
| WorkReq of AsyncReplyChannel<SupervisorResponse<'work>> //'
//The supervisor agent can be interacted …Run Code Online (Sandbox Code Playgroud) 看着:
member this.PostAndReply : (AsyncReplyChannel<'Reply> -> 'Msg) * ?int -> 'Reply
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么签名看起来对我来说非常直观.我们想要做的是向代理发布消息,然后等待回复.为什么我们必须给他一个奇怪的功能作为'信息'?
再次看到这个MSDN片段:
let rec loop() =
printf "> "
let input = Console.ReadLine()
printThreadId("Console loop")
let reply = agent.PostAndReply(fun replyChannel -> input, replyChannel)
if (reply <> "Stopping.") then
printfn "Reply: %s" reply
loop()
else
()
loop()
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样的东西:
member this.PostAndReply : 'Msg * ?int -> 'Reply
Run Code Online (Sandbox Code Playgroud)
谢谢
对于我的自动化测试,我有一个项目添加到TeamCity服务器和2个代理池,一个是Windows服务器,另一个是MAC.默认代理程序池是WIN,但我想在MAC服务器上运行我的测试.若要更改代理池MAC,我试图通过设置添加代理需求 teamcity.agent.name到MAC server从列表中,但不会添加到与项目相关的相容剂的名单,但加入的相容性助剂与在它上面这样的警告:Following agents belong to the agent pools which are not associated with "Tests" project这里测试是我的项目的名称.
如何将MAC代理与我的项目相关联?
来自mutli-agent系统的学术背景(使用JADE在Java中开发)我只是在外围意识到Actor并发范例.现在我已经开始探索Scala,我忍不住被Agent和Actor方法之间的相似性所打动.
我非常想在我的下一个研究项目中使用Scala的Actor库而不是简单地调用JADE库,因为这会迫使我更深入地掌握语言.此外,JADE专注于根据行为定义所有内容并不适合我的问题.
高度自主的演员和我失踪的特工之间是否存在根本不同的东西?
我试图结束我对Matlab的依赖,并转向Python.我很快就会开始在代理中实现机器学习(神经网络/ SVM)(模拟船舶交通).我需要一个机器学习工具箱和一个模拟环境.
有很多ML/Python选项.剩下的挑战是模拟环境(2D或3D).
Netlogo很有意思,但似乎只能调用外部函数.它也是基于Java的.Breve似乎很完美,但似乎也是一个死项目.Pybrain提到了一些环境(PyODE?),但细节尚不清楚.
那么有没有人对具有良好Python界面的模拟/可视化环境提出一些好的建议?
如果代理在Clojure的后台运行其队列,如何在不停止所有代理的情况下停止它?
当我完成一个代理并且我让它超出范围并且它完成了它的队列工作时,它是否与其最终状态一起被垃圾收集?
我在clojure中编写了一个多线程弹跳球程序.启动动画线程后,我做 -
(send-balls)
Run Code Online (Sandbox Code Playgroud)
开始弹跳球线程.球不移动,这显示在控制台上 -
(#<Agent@5675b3ee FAILED: #<Ref@313d21d6: {:x 759, :y 629, :x-speed 3, :y-speed 1}>> #<Agent@22cf3539 FAILED: #<Ref@247881db: {:x 794, :y 258, :x-speed 2, :y-speed 3}>> #<Agent@51af4309 FAILED: #<Ref@445ead9d: {:x 831, :y 251, :x-speed 4, :y-speed 2}>>)
Run Code Online (Sandbox Code Playgroud)
有人能指出这里发生了什么?
(import
'(java.awt Color Graphics Dimension)
'(java.awt.image BufferedImage)
'(javax.swing JPanel JFrame))
(def width 1000)
(def height 1000)
(def number-of-balls 3)
(def rad 20)
(def origin-x 100)
(def origin-y 100)
(def box-height 500)
(def box-width 700)
(def max-x (+ origin-x box-width (* 4 …Run Code Online (Sandbox Code Playgroud) agents ×10
clojure ×4
actor ×2
f# ×2
scala ×2
agent ×1
agents-jade ×1
concurrency ×1
format ×1
mapreduce ×1
python ×1
robots.txt ×1
teamcity ×1
web-crawler ×1