I'm using grpc
as IPC
in a new software that I'm building but I came across this question: the grpc Client implantation in Go is synchronous or asynchronous?
Surfing on internet I discover that the C++ has both implementation but in Go there is lack of documentation about this feature (apart an issue on GitHub).
For this reason I start inspecting the Client code and I found that the client request is made by the invoke
function (here the code) and seems that is running synchronously.
For this reason I'm supposing that instead of using a global client and then pass to the struct that use the grpc functions I should create a client for each request to prevent a synchronous behaviour.
e.g.
Instead of:
type Foo struct {
ClientA *grpc.Client
}
type Bar struct {
ClientB *grpc.Client
}
//Other stuff
client := createNewClient() //This function return a *grpc client
foo := Foo{client}
bar := Bar{client}
I should create a new client for each function of Foo
and Bar
struct for executing calls not thread blocking. Is it correct?