Corda 节点何时检查点自身

Corda 节点何时检查点自身,corda,Corda,我知道有一些与@Suspendable相关的注释将函数标记为可序列化。流检查点本身有多少 节点是否仅在等待响应时有send/send和receive时检查点自身?还是每隔一段时间将检查点序列化 给定一个只执行计算的流,它对磁盘的序列化/写入量是多少?如果执行vault查询/写入的其他线程的读/写负载达到峰值,这会影响性能吗 @Suspendable如何在这些只做计算而不做其他事情的私有方法中发挥作用。如果一个方法被注释,它只会在下一次send时被序列化,否则什么都不会被序列化 范例 @Suspe

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

节点是否仅在等待响应时有
send
/
send和receive
时检查点自身?还是每隔一段时间将检查点序列化

给定一个只执行计算的流,它对磁盘的序列化/写入量是多少?如果执行vault查询/写入的其他线程的读/写负载达到峰值,这会影响性能吗

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

范例

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

@Suspendable
private querySomeStates()

@Suspendable
computeSomethingHeavy()

@Suspendable
decideSomething()

@Suspendable
将函数标记为可能可挂起。仅当执行以下操作之一时,流才会实际暂停:

  • 流量启动
  • send
  • 接收
  • send和receive
  • waitForLedgerCommit
  • getFlowInfo
  • 睡眠
当执行其中一个操作时,节点使用Quasar捕获执行堆栈并创建检查点。如果函数不执行任何这些操作,则不会创建检查点。即使流正在进行繁重的计算和/或函数被标记为
@Suspendable
,这也是正确的。换句话说,Quasar不做抢占,这意味着我们不“定期检查”,而只在特定的呼叫站点

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

@Suspendable
趣味电话(){
//检查站!
发送某物
计算某物()
}
@暂停
有趣的事{
send()//检查点!
}
@暂停
有趣的计算某物{
heavyComputation()//没有检查点!
}