当前位置: 首页 > 面试题库 >

gRPC线程中的通道/存根是否安全

夏骏
2023-03-14
问题内容

从Java使用gRPC时,我可以缓存存根(客户端)并在多线程环境中调用它们吗?或者通道是线程安全的并且可以安全地缓存吗?

如果网络中断,我应该重新创建通道还是它足够智能以重新连接?我在http://www.grpc.io/docs/上找不到相关信息

谢谢


问题答案:

回答第一个问题:

通道是线程安全的;io.grpc.Channel标有@ThreadSafe注释。存根也是线程安全的,这就是为什么重新配置会创建新的存根的原因。

回答第二个问题:

如果网络中断,则无需重新创建通道。通道将重新建立指数补偿,大致与连接补偿文档所述相同。Java并非100%遵循该算法,因为它不会在以后的重试中增加连接超时。(不要与已实现的指数补偿相混淆。)



 类似资料:
  • 问题内容: Axis2从WSDL生成的客户端存根是否是线程安全的? 当然,“线程安全”并不是严格定义的术语,因此我至少对以下内容感兴趣: 同一个存根类的 不同 实例是否可以由不同线程同时访问,并且具有与单线程执行相同的有效行为? 同一存根类的 单个 实例是否可以由不同的线程并发地以相同的有效行为与相同的调用以某种任意方式在单线程执行中交织在一起? 您可能还希望使用这里描述的术语(和起源于此)来更精

  • 消费者是一个spring集成项目,它从消息队列中消费并执行大量处理。我使用Executor通道并行处理消息,然后流通过一些公共处理程序类。 请在下面的代码片段中找到- -我们从EMS队列接收消息并将其发送到路由器 -基于以下消息的id:“特定ExecutorChannel实例配置了一个单线程执行器。每个ExecutorChannel都将是它的专用执行器,只有一个线程。 -所有ExecutorCha

  • 问题内容: 我想找到一个队列结构(数据容器),其元素必须是先进先出的。对我而言,重要的是该结构必须是线程安全的。我将使用此数据容器作为任务或连接池之类的东西。 我知道缓冲通道是线程安全的,但是我想知道它是否可以作为FIFO使用,特别是在并发情况下。 并且如果可以将缓冲通道用作线程安全队列,我是否需要担心其效率? 问题答案: 我很确定Channels是FIFO。它们也很便宜,因此它们将提高内存效率。

  • 问题内容: 我一直在假设线程安全也不是线程安全,但是在最近的一次讨论中,一位同事告诉我线程安全。 因此,我做了一些研究,却一无所获。很多人认为它是线程安全的,很多人认为它不是线程安全的。而且,最重要的是,文档没有以一种或另一种方式说任何话,不是为了,甚至不是。 那是什么呢? 问题答案: 这是指向Java 7 中Calendar和GregorianCalendar的源代码的链接。 如果阅读该代码,您

  • 我有一个从Rabbit接收消息的应用程序。当收到一条消息时,它会对它进行处理,然后在完成时执行ACK。应用程序可以在一个固定的线程池中同时处理2个项目,有2个线程。Rabbit的QOS预取设置为2,因为我不想在一个时间框架内给应用提供超过它所能处理的内容。 现在,我的消费者的handleDelivery执行以下操作: 此时,您已经发现TestWrapperThread将调用作为最后一个操作。 根据

  • 我有一个在Oracle 11g DB上运行的insert语句,如下所示: 这里有一个处理PostgreSQL的类似问题。但是,由于Oracle序列由所有会话共享,所以我不能相信DB会给出当前会话中最后插入的值。