编辑“︁
Future与promise
”︁(章节)
跳转到导航
跳转到搜索
脚本错误:没有“Mainspace editnotice”这个模块。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
任何侵權內容
將會刪除 | 百科內容須附有來源,以
供查證
| 維基百科內容均容許他人編輯、使用和重製 | 參閱
繁簡
和
地區詞處理
指引。
反垃圾检查。
不要
加入这个!
==promise流水线== 在[[分布式计算|分布式系统]]中使用推迟值可以显著地减少传输延迟。例如,指称推迟值的promise,成就了“promise流水线”<ref>{{cite web|url=http://www.erights.org/elib/distrib/pipeline.html|title=Promise Pipelining|website=www.erights.org|accessdate=2018-12-31|archive-date=2018-10-22|archive-url=https://web.archive.org/web/20181022040801/http://erights.org/elib/distrib/pipeline.html|dead-url=no}}</ref><ref>{{Cite web |url=http://c2.com/cgi/wiki?PromisePipelining |title=Promise Pipelining on the C2 wiki |accessdate=2018-12-31 |archive-date=2005-09-25 |archive-url=https://web.archive.org/web/20050925100747/http://c2.com/cgi/wiki?PromisePipelining |dead-url=no }}</ref>,就像在[[E语言|E]]语言和{{le|Joule语言|Joule (programming language)|Joule}}语言中实现的那样,它在[[Argus (编程语言)|Argus]]语言中称为“call-stream”<ref name="call-stream" />。 考虑一个涉及常规[[遠程過程調用|远程过程调用]]的表达式,例如: <pre> t3 := (x.a()).c(y.b()) </pre> 可以展开为 <pre> t1 := x.a(); t2 := y.b(); t3 := t1.c(t2); </pre> 每个语句需要发送一条消息,并在下一个语句可以继续之前收到一个答复。例如,假设<code>x</code>、<code>y</code>、<code>t1</code>和<code>t2</code>都位于同一台远程机器上。在这种情况下,在开始执行第三条语句之前,必须对该机器进行两次完整的网络往返。然后,第三条语句将引起另一个到同一个远程机器的往返。 上面的表达式可以使用E语言的语法写为: <pre> t3 := (x <- a()) <- c(y <- b())</pre> 其中<code>x <- a()</code>表示将消息<code>a()</code>异步发送给<code>x</code>。它可以展开为: <pre> t1 := x <- a(); t2 := y <- b(); t3 := t1 <- c(t2); </pre> 所有三个变量都会立即为其结果分配promise,执行过程将继续进行到后面的语句。之后尝试解决<code>t3</code>的值可能会导致传输延迟;但是,流水线操作可以减少所需的往返次数。如果与前面的示例一样,<code>x</code>、<code>y</code>、<code>t1</code>和<code>t2</code>都位于相同的远程机器上,则流水线实现可以用一次往返来计算<code>t3</code>,不必用三次。由于所有三条消息都指向同一远程计算机上的对象,因此只需要发送一个请求,只需要接收一个包含结果的响应。另请注意,即使<code>t1</code>和<code>t2</code>位于不同机器上,或者位于与<code>x</code>或<code>y</code>不同的机器上,发送<code>t1 <- c(t2)</code>也不会阻塞。 promise流水线应与并行异步消息传递区分开来。在支持并行消息传递但不支持流水线操作的系统中,上面示例中的消息发送<code>x <- a()</code>和<code>y <- b()</code>可以并行进行,但发送<code>t1 <- c(t2)</code>将不得不等到<code>t1</code>和<code>t2</code>都被接收,即使<code>x</code>、<code>y</code>、<code>t1</code>和<code>t2</code>在同一个远程机器上。在涉及许多消息的更复杂情况下,流水线的相对传输延迟优势变得更大。 promise流水线操作也不应与演员系统中的流水线式消息处理相混淆,在这种系统中,演员可以在完成当前消息的处理之前,指定并开始执行下一个消息的行为。
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
分类索引
特色内容
新闻动态
随机页面
联络我们
关于
资助维基百科
interaction
帮助
社群首页
introduction
互助客栈
IRC即时聊天
最近更改
特殊页面
工具
链入页面
相关更改
特殊页面
页面信息