相关疑难解决方法(0)

Go 程序的主协程和衍生协程之间的区别

使用 创建服务器时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)

go goroutine grpc

4
推荐指数
1
解决办法
3652
查看次数

标签 统计

go ×1

goroutine ×1

grpc ×1