在x/tools中搜索"信号量"一词,揭示了五个独立的I/O信号量。其中一些可以很容易地用于同一个可执行文件,例如go/loader
、go/buildutil
、refactor/importgraph
和cmd/guru
中的信号量。这使得它们的作用效果不大。
我建议我们在x/tools中添加一个单独的导出信号量,所有x/tools包都可以导入并使用它,从而为I/O并发性提供实际的进程级限制。它可以放在一个内部包中,也可以不放;我没有强烈的感觉。
cc @bradfitz@alandonovan@kevinburke 征求意见
8条答案
按热度按时间syqv5f0l1#
在搜索
make(chan struct{},
时,找到了另外三个。anauzrmj2#
我对此没有强烈的感觉!实际上,我维护了一个信号量包,但我不关心我们是否使用它。
oymdgrw73#
内部包听起来不错。如果我能重新制作x/tools,我会导出它目前拥有的一小部分API。
yqhsw0fo4#
好的,我会这样做。有人想在我发送CL之前讨论API细节吗?由于没有更好的名称,也许可以这样:
包名:
golang.org/x/tools/internal/iosem
导出的API:
Acquire()
和Release()
允许的并发数将固定为20。
使用方式如下:
bqf10yzr5#
备选的包名:
iolimit
,iogate
。备选的功能名:Enter
/Leave
,Enter
/Exit
。oxcyiej76#
https://golang.org/cl/108878提到了这个问题:
cmd/guru: parallelize loop in globalReferrersPkgLevel
iaqfqrcu7#
iosem
和.Acquire()/.Release()
对我来说听起来不错。我们是否应该公开并发性?或者将其固定为20?
ua4mk5z48#
如果有需要,我们稍后可以暴露并发性。我们在x/tools的其他20个地方使用了它,目前硬编码是更简单的方法。