go x/tools:统一I/O信号量

gk7wooem  于 6个月前  发布在  Go
关注(0)|答案(8)|浏览(52)

在x/tools中搜索"信号量"一词,揭示了五个独立的I/O信号量。其中一些可以很容易地用于同一个可执行文件,例如go/loadergo/buildutilrefactor/importgraphcmd/guru中的信号量。这使得它们的作用效果不大。
我建议我们在x/tools中添加一个单独的导出信号量,所有x/tools包都可以导入并使用它,从而为I/O并发性提供实际的进程级限制。它可以放在一个内部包中,也可以不放;我没有强烈的感觉。
cc @bradfitz@alandonovan@kevinburke 征求意见

syqv5f0l

syqv5f0l1#

在搜索make(chan struct{},时,找到了另外三个。

anauzrmj

anauzrmj2#

我对此没有强烈的感觉!实际上,我维护了一个信号量包,但我不关心我们是否使用它。

oymdgrw7

oymdgrw73#

内部包听起来不错。如果我能重新制作x/tools,我会导出它目前拥有的一小部分API。

yqhsw0fo

yqhsw0fo4#

好的,我会这样做。有人想在我发送CL之前讨论API细节吗?由于没有更好的名称,也许可以这样:
包名:golang.org/x/tools/internal/iosem
导出的API:Acquire()Release()
允许的并发数将固定为20。
使用方式如下:

iosem.Acquire()
// do work
iosem.Release()
bqf10yzr

bqf10yzr5#

备选的包名:iolimit,iogate。备选的功能名:Enter/Leave,Enter/Exit

oxcyiej7

oxcyiej76#

https://golang.org/cl/108878提到了这个问题:cmd/guru: parallelize loop in globalReferrersPkgLevel

iaqfqrcu

iaqfqrcu7#

iosem.Acquire()/.Release() 对我来说听起来不错。
我们是否应该公开并发性?或者将其固定为20?

ua4mk5z4

ua4mk5z48#

如果有需要,我们稍后可以暴露并发性。我们在x/tools的其他20个地方使用了它,目前硬编码是更简单的方法。

相关问题