gpt4 book ai didi

go - 这是 goroutine 开销的一个更好的代码

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:09 25 4
gpt4 key购买 nike

我想让 Reader.Read 与 channel 通信并发。所以我做了两种运行方式

1:

type ReturnRead struct {
n int
err error
}

type ReadGoSt struct {
Returnc <-chan ReturnRead
Nextc chan struct{}
}

func (st *ReadGoSt) Close() {
defer func() {
recover()
}()
close(st.Next)
}

func ReadGo(r io.Reader, b []byte) *ReadGoSt {
returnc := make(chan ReturnRead)
nextc := make(chan bool)

go func() {
for range nextc {
n, err := r.Read(b)
returnc <- ReturnRead{n, err}
if err != nil {
return
}
}
}()

return &ReadGoSt{returnc, nextc}
}

2:

func ReadGo(r io.Reader, b []byte) <-chan ReturnRead {
returnc := make(chan ReturnRead)
go func() {
n, err := r.Read(b)
returnc <- ReturnRead{n, err}
}()
return returnc
}

我认为代码 2 产生了太多开销

哪个代码更好? 1? 2?

最佳答案

代码 1 更好,而且可能更快。代码 2 只会读取一次。但我认为这两种解决方案都不是最好的。你应该循环读取并只发回读取的字节。

类似于:http://play.golang.org/p/zRPXOtdgWD

关于go - 这是 goroutine 开销的一个更好的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865277/

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