Multithreading 场景中的Corda FlowLogic行为-这里线程的相关性是什么?
我试图理解流逻辑和会话的实际流程 考虑一个场景,其中有3个参与方节点a、B和C。在一开始,a与B启动一个事务,但B当时处于关闭状态。据我所知,它将继续重试,直到B回来Multithreading 场景中的Corda FlowLogic行为-这里线程的相关性是什么?,multithreading,kotlin,blockchain,corda,single-threaded,Multithreading,Kotlin,Blockchain,Corda,Single Threaded,我试图理解流逻辑和会话的实际流程 考虑一个场景,其中有3个参与方节点a、B和C。在一开始,a与B启动一个事务,但B当时处于关闭状态。据我所知,它将继续重试,直到B回来 此时A是否可能与C启动另一个事务 我读到开源Corda是单线程的,而企业 是多线程的,所以这会改变 上述情景 我已经经历了一些关于显式地使流和线程睡眠的提示。请在这里照点光 Corda开源: 当流挂起时(当它调用send(),receive(),sendandereceive(),或sleep()),单个线程被释放,另一
- 此时A是否可能与C启动另一个事务
- 我读到开源Corda是单线程的,而企业 是多线程的,所以这会改变 上述情景
- 当流挂起时(当它调用
,send()
,receive()
,或sendandereceive()
),单个线程被释放,另一个流可以启动sleep()
- 当流调用外部操作(例如HTTP调用、DB调用)时,该调用被阻塞;这意味着在外部调用完成且流返回之前,线程一直被流锁定。在这种情况下,无法启动另一个流
- 从Corda4.4开始,您可以定义异步流操作(阅读相关内容),这将把那些长时间运行的操作放在一个单独的线程中,并挂起流;使流线程可用于其他流的启动
- 正如您提到的,它有多个流线程。因此,上面的观点同样适用,但根据可用的流线程数量,您有更多的空间启动其他流
send()
,receive()
,和sendandereceive()
)都会导致流暂停。但是我认为您共享的send()
方法的文档是正确的。这意味着挂起仅在流正在等待某些内容时发生(即调用receive()
或sendandereceive()
)。我将与R3联系以获得澄清并发布更新。根据R3的回复,send()
导致暂停,只是为了创建一个检查点,但它会立即进行。