Multithreading 场景中的Corda FlowLogic行为-这里线程的相关性是什么?

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()),单个线程被释放,另一

我试图理解流逻辑和会话的实际流程

考虑一个场景,其中有3个参与方节点a、B和C。在一开始,a与B启动一个事务,但B当时处于关闭状态。据我所知,它将继续重试,直到B回来

  • 此时A是否可能与C启动另一个事务

  • 我读到开源Corda是单线程的,而企业 是多线程的,所以这会改变 上述情景

我已经经历了一些关于显式地使流和线程睡眠的提示。请在这里照点光

Corda开源:

  • 当流挂起时(当它调用
    send()
    receive()
    sendandereceive()
    ,或
    sleep()
    ),单个线程被释放,另一个流可以启动
  • 当流调用外部操作(例如HTTP调用、DB调用)时,该调用被阻塞;这意味着在外部调用完成且流返回之前,线程一直被流锁定。在这种情况下,无法启动另一个流
  • 从Corda4.4开始,您可以定义异步流操作(阅读相关内容),这将把那些长时间运行的操作放在一个单独的线程中,并挂起流;使流线程可用于其他流的启动
科达企业:

  • 正如您提到的,它有多个流线程。因此,上面的观点同样适用,但根据可用的流线程数量,您有更多的空间启动其他流

在send()Receive()和send()和Receive()之间。不是只有SendReceive具有可挂起功能吗?因为我在这里读到,发送不暂停!只是澄清一下。看答案。哦。。。那么,我想知道,在上面的链接中,Flowlogic.send的意思是什么:“将给定的有效负载排队以发送给另一方,然后继续,而不挂起。请注意,另一方可能在稍后的某个任意时间点接收到消息,或者根本不接收消息:如果另一方处于脱机状态,则将重试消息传递,直到消息返回或消息的时间早于网络的事件范围时间。“文件上说它不会挂起,但你们分享的其他帖子说它会被挂起@BEN我认为你是对的,官方文档中存在矛盾,例如它提到所有三个函数(
send()
receive()
,和
sendandereceive()
)都会导致流暂停。但是我认为您共享的
send()
方法的文档是正确的。这意味着挂起仅在流正在等待某些内容时发生(即调用
receive()
sendandereceive()
)。我将与R3联系以获得澄清并发布更新。根据R3的回复,
send()
导致暂停,只是为了创建一个检查点,但它会立即进行。