Io Language学习:并行map的运行原理

前面给了个Io异步编程的例子,最后说“和Erlang比一比“,我指的是Erlang做类似的功能需要pmap。

为什么Io的List#map可以适应这种并行调用?本文简单分析一下。

通过阅读源码,首先可以确定的是map本身没有作任何特殊处理,所以重点放在"@"这个操作符上,它完成异步操作。

经过测试发现,方法如果是异步调用(应该说消息是异步发送,说方法调用感觉自然一些),如果不“使用”调用结果,是不会等待结果返回的。这里的“使用”并不是简单地赋给一个变量,而是真正使用这个变量,比如返回一个整数,简单地:
[code]
a := foo @bar
[/code]
并不会等待调用的结果,只有使用a这个变量时--例如b := a+1, a println--它才会等待调用结果。

前面的并行map正是使用了这个特性,你可以觉得奇怪,结果放到一个list里面难道不算是使用吗?其实不然,它放入的是一个Proxy对象,并非真正的结果,只有你取用list成员时,它才会取结果。有一点细节是,就算你不取结果,但调用也是真的发生了,只是这边不用等待。

它是如何完成这个过程的?简单看一下Actor.io这个文件,"@"的实现就在这里:

[code]
Object do(
setSlot("@", method(
//writeln("@ ", call argAt(0))
m := call argAt(0) asMessageWithEvaluatedArgs(call sender)
f := Future clone setRunTarget(self) setRunMessage(m)
self actorRun
self actorQueue append(f)
f futureProxy
))
)
[/code]
可以看出它把调用塞到队列里,然后返回一个Proxy对象,所以我们的list里实际上都是FutureProxy对象,把结果类型打印一下就知道了:

[code]
result at(0) type println
[/code]

但为什么result println打印的是包含几个整数的list?

原因在于FutureProxy:

[code]
FutureProxy := Object clone do(
with := method(future,
p := self clone
p _future := future
p forward := self getSlot("_forward")
p _become := self getSlot("become")
//p xyz := method(_future writeln("XYZ!"))
p type := "FutureProxy"
p removeAllProtos
p
)

_forward := method(
//_future writeln("FutureProxy forward ", call message)
_future waitOnResult
self doMessage(call message, call sender)
)
)
[/code]

它定义了forward方法,这个方法和Ruby的method_missing相似,由于它没有其它方法,所以使用它(给它发消息)时都会自然调用到这个方法。它在这里完成的功能是等待结果,然后取得结果。这个功能也可以用Ruby来完成,Io这一整套东西其实可以用Ruby 1.9来完成,很可能比现在的Io效率高很多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
1. 智慧监狱概述 智慧监狱的建设背景基于监狱信息化的发展历程,从最初的数字化监狱到信息化监狱,最终发展到智慧监狱。智慧监狱强调管理的精细化、监管的一体化、改造的科学化以及办公的无纸化。政策上,自2017年以来,司法部连续发布了多项指导性文件,推动智慧监狱的建设。 2. 内在需求与挑战 智慧监狱的内在需求包括数据应用与共享的不足、安防系统的单一功能、IT架构的复杂性、信息安全建设的薄弱以及IT运维的人工依赖。这些挑战要求监狱系统进行改革,以实现数据的深度利用和业务的智能化。 3. 技术架构与设计 智慧监狱的技术架构包括统一门户、信息安全、综合运维、安防集成平台和大数据平台。设计上,智慧监狱采用云计算、物联网、大数据和人工智能等技术,实现资源的动态分配、业务的快速部署和安全的主动防护。 4. 数据治理与应用 监狱数据应用现状面临数据分散和共享不足的问题。智慧监狱通过构建数据共享交换体系、数据治理工具及服务,以及基于数据仓库的数据分析模型,提升了数据的利用效率和决策支持能力。 5. 安全与运维 智慧监狱的信息安全建设涵盖了大数据应用、安全管理区、业务区等多个层面,确保了数据的安全和系统的稳定运行。同时,综合运维平台的建立,实现了IT系统的统一管理和自动化运维,提高了运维效率和系统的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值