亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這個 RPC 服務器不能擴展?

為什么這個 RPC 服務器不能擴展?

Go
九州編程 2021-07-15 17:01:33
package mainimport (    "fmt"    "net"    "net/rpc"    "sync")type SumInput struct {    UpTo int}type SumOutput struct {    Result int}type RpcServer struct {}func (s *RpcServer) Calculate(in *SumInput, out *SumOutput) error {    for i := 0; i < in.UpTo; i++ {        out.Result += i    }    return nil}func main() {    server := new(RpcServer)    rpc.Register(server)    sock, err := net.Listen("tcp", ":1234")    if err != nil {        panic(err)    }    go func() {        for {            conn, err := sock.Accept()            if err != nil {                panic(err)            }            go rpc.ServeConn(conn)        }    }()    wg := &sync.WaitGroup{}    wg.Add(100)    for i := 0; i < 100; i++ {        go func(i int) {            client, err := rpc.Dial("tcp", "127.0.0.1:1234")            if err != nil {                panic(err)            }            rpcOut := &SumOutput{}            err = client.Call("RpcServer.Calculate", &SumInput{100000000}, rpcOut)            if err != nil {                panic(err)            }            fmt.Println("Got reply: ", rpcOut, i)            wg.Done()        }(i)    }    wg.Wait()}它并行啟動 RPC 服務器和 100 個客戶端,但它從不使用超過 1 個 CPU,盡管 GOMAXPROCS 已正確配置。那么是什么阻止了它使用更多的 CPU?以及如何改善這種情況?
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

我像這樣嘗試了您的示例,并且在我的筆記本電腦上使用所有 8 個 CPU 都可以正常工作

GOMAXPROCS=8 go run rpctest.go

所以猜測你GOMAXPROCS以某種方式搞砸了設置環境變量。您是否將其設置在單獨的行上并忘記導出它?

export GOMAXPROCS=8

通常我使用運行時模塊在程序中設置它

runtime.GOMAXPROCS(runtime.NumCPU())


查看完整回答
反對 回復 2021-07-19
  • 1 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號