使用 创建服务器时gRPC,如果我gRPC在主进程中启动服务器,它可以处理来自客户端的多达(数千个)请求。但是,如果我将服务器作为 goroutine 启动,它只能处理一些请求(数百个)并且在卡住之后。我已经通过一个非常简单的示例 google.golang.org/grpc/examples/helloworld 测试并确认了这一点。
是因为生成的 goroutines 堆栈大小非常小(2Kbytes),而主 goroutines 大得多?主协程和衍生协程有什么区别?
示例链接。修改部分示例如下。
greeter_server/main.go
func main() {
go func() {
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
s.Serve(lis)
}()
for {
}
}
Run Code Online (Sandbox Code Playgroud)
greeter_client/main.go
func main() {
// Set up a connection to the server.
for i := 0; i < 500; i++ {
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err …Run Code Online (Sandbox Code Playgroud)