gpt4 book ai didi

corda - 什么时候节点检查点本身

转载 作者:行者123 更新时间:2023-12-04 01:54:43 25 4
gpt4 key购买 nike

我知道有一些与 @Suspendable 相关的注释可以将函数标记为可序列化。流量检查点本身有多少?

只有在等待响应时有 send/sendAndReceive 时,节点本身才会检查点吗?或者它是否每隔一段时间序列化检查点?

给定一个除了计算什么都不做的流,它序列化/写入磁盘的量是多少,如果其他线程执行 vault 查询/写入时出现读/写峰值负载,这是否会影响性能。

@Suspendable 如何在这些只做计算而不做其他事情的私有(private)方法中发挥作用。如果一个方法被注释,它只会在下一个发送时被序列化,否则什么都不会被序列化?

例子

@Suspendable
override fun call() {
val states = querySomeStates()
computeSomethingHeavy(states)
decideSomething()
}

@Suspendable
private querySomeStates()

@Suspendable
computeSomethingHeavy()

@Suspendable
decideSomething()

最佳答案

@Suspendable 将函数标记为可能 可暂停。只有在执行以下操作之一时,流才实际上暂停:

  • 流程开始
  • 发送
  • 接收
  • 发送和接收
  • waitForLedgerCommit
  • getFlowInfo
  • sleep

当执行这些操作之一时,节点使用 Quasar 捕获执行堆栈并创建检查点。如果函数不执行任何这些操作,则不会创建检查点。即使流程正在执行繁重的计算和/或函数被标记为 @Suspendable,也是如此。换句话说,Quasar 不会进行抢占,这意味着我们不会“定期检查点”,而只会在特定的调用点。

例如,这是一个简单流程中的检查点序列:

@Suspendable
有趣的电话(){
//检查点!
发送一些东西()
计算东西()
}
@暂停
有趣的 sendSomething() {
发送()//检查点!
}
@暂停
有趣的 computeSomething() {
heavyComputation()//没有检查点!
}

关于corda - 什么时候节点检查点本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51178007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com