gpt4 book ai didi

multithreading - csharp 中的 grpc channel / stub 线程是否安全

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

在 csharp 中是 grpc channel 线程安全的,或者更一般地说,在任何取决于 C 核心版本的语言中;

对于以下代码:
1) channel 线程安全吗?
2) 客户端线程安全吗?

        Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);

Task task1 = Task.Factory.StartNew(() =>
{

var client = new Greeter.GreeterClient(channel);
String user = "you";
var reply = client.SayHello(new HelloRequest {Name = user});
Console.WriteLine("Greeting: " + reply.Message);
});

Task task2 = Task.Factory.StartNew(() =>
{

var client = new Greeter.GreeterClient(channel);
String user = "you";
var secondReply = client.SayHelloAgain(new HelloRequest {Name = user});
Console.WriteLine("Greeting: " + secondReply.Message);

});

task1.Wait();
task2.Wait();
channel.ShutdownAsync().Wait();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

最佳答案

是的, channel 和客户端(其他语言的 stub )在 csharp 中都是线程安全的。

channel 是到远程服务器的长期连接的抽象。更多的客户端对象可以重用相同的 channel ,即使是不同的 gRPC 服务器,只要它们具有相同的地址(例如,在 Kubernetes 中使用 Envy as sidecar,服务器地址都是 localhost:envoy-port )。

该文档明确指出,与调用远程调用相比,创建 channel 是一项昂贵的操作,因此通常您应该为尽可能多的调用重用单个 channel 。这是它的 source code .可以看到它的共享数据可以被多个线程安全访问。

客户端的基类 ClientBase<T>ClientBase都是线程安全的,您可以从他们的 source code 中验证它.
因此,如果您只使用自动生成的客户端,则客户端是线程安全的,并且您添加的客户端拦截器也是线程安全的。

关于multithreading - csharp 中的 grpc channel / stub 线程是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48070469/

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