草庐IT

并发性

全部标签

go - 了解 golang 中并发性的最佳资源是什么?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion我新来的?有人可以使用go指定资源来理解并发吗?

go - 与并发功能不一致的结果?

我正在尝试同时处理文件中的行,但出于某种原因,我似乎得到了不一致的结果。我的代码的简化版本如下:varwgsync.WaitGroupsemaphore:=make(chanstruct{},2)lengths:=[]int{}for_,file:=range(args[1:]){//Openthefileandstartreadingitreader,err:=os.Open(file)iferr!=nil{fmt.Println("Problemreadinginputfile:",file)fmt.Println("Error:",err)os.Exit(0)}scanner:=

go - 无锁并发访问变量

我被一个问题打扰了,shouldweaddlockifonlyonethreadwritevariable,andotherthreadjustreadvariable?所以我写了这样的代码来测试一下packagemainimport("fmt""runtime""sync""time")varlocksync.RWMutexvari=0funcmain(){runtime.GOMAXPROCS(2)gofunc(){for{fmt.Println("iamhere",i)time.Sleep(time.Second)}}()for{i+=1}}结果是保持打印iamhere0即使在第二

multithreading - sync.Mutex在并发Golang程序中是如何工作的

在Go中使用并发程序时,我们使用varmutexsync.Mutex然后如果我们必须编写执行一些同步代码块,我们调用mutex.Lock()和mutex.Unlock()。现在我在这里有一些疑问:1)是否只有一个mutex实例,即如果mutex用于锁定CodeBlockA的操作,同时还有其他一些goroutineB必须将它用于其他一些也使用mutex的CodeBlockB,goroutineB是否会被阻塞,直到goroutineA解除互斥体。2)是否有可能我们可以有更多的静音实例来保护它们自己的专用代码块。 最佳答案 在编写示例代码

go - 并发写入包含 Golang 中另一个 Map 的 Map

在Golang中,我们必须将并发更改同步到Map。如果我的map包含另一个像这样的map:map[string]map[string]*CustomStruct..在写东西的时候我必须在所有这些中使用Lock吗?如果我将一些东西写入内部Map->外部Map也会被更改,所以我仍然必须同步外部Map的更改。如果我锁定外部Map的更改->没有其他人可以写入内部Map->锁定内部Map没有意义。我是对的还是它以不同的方式工作并且我必须锁定所有map? 最佳答案 我的理解是这里没有任何硬性规定。例如,您可以通过一个甚至没有存储在map上的互斥

go - 从指针并发读取是否安全?

我正在开发一个图片uploader,并希望同时将图片调整为不同的大小。一旦我将文件作为[]byte读取,我就会将该缓冲区的引用传递给正在同时运行的调整大小函数。这样安全吗?我在想通过传递一个大文件的引用来由调整大小函数读取会节省我的内存,并发会节省我的时间。谢谢! 最佳答案 只读数据通常适合并发访问,但在传递引用(指针、slice、映射等)时必须非常小心。今天,当您还在阅读时,也许没有人在修改它们,但明天可能有人会。如果这是一次性脚本,您会没事的。但如果它是更大程序的一部分,我建议通过明智地保护并发访问来使您的代码面向future。

go - 如果没有互斥体,并发处理 slice 无法按预期工作

函数WithMutex和WithoutMutex给出了不同的结果。WithoutMutex实现正在丢失值,即使我设置了Waitgroup。有什么问题吗?DonotrunonPlayground附言我使用的是Windows10和Go1.8.1packagemainimport("fmt""sync")varp=fmt.PrintlntypeMuTypestruct{list[]int*sync.RWMutex}varmuData*MuTypevardata*NonMuTypetypeNonMuTypestruct{list[]int}func(data*MuType)add(iint,w

go - 在同一个共享 channel 上并发选择

我在想如果多个goroutines在一组channel上执行select会发生什么,其中一个/一些在它们之间共享并且当它们都在等待时,共享channel变为可用.运行时会处理这种情况并只允许一个goroutine访问channel并进行读/写吗? 最佳答案 上面的评论都回答了。您也可以编写一些代码并亲自查看。这些线上的东西https://play.golang.org/p/4ZQLwO9wvw 关于go-在同一个共享channel上并发选择,我们在StackOverflow上找到一个类似

performance - Golang goroutine 在添加并发时变慢

我正在研究golang和goroutine的使用。使用此示例代码,在我具有4个逻辑CPU的PC上,我无法理解为什么我没有任何性能提升。如果我添加并发,那么它所花费的时间往往会比没有并发的原始时间慢。2017/10/2713:57:17Starting1threads2017/10/2713:57:27Idroutine:0rate:232.5581402017/10/2713:57:27Currenttotalratewas232.56K/s2017/10/2713:57:27Starting1threads2017/10/2713:57:37Idroutine:0rate:357.1

go - 如何限制与 Go API 的并发连接

我正在启动一个带有listenandserve的GoAPI来接受HTTP请求。我怎样才能实现以下目标?允许最多100个并发HTTP请求第101个请求(以及任何其他请求)应等待10分钟以尝试落入此“100个同时”限制(即希望前100个请求中的一些请求应该完成)如果10分钟过去了并且没有可用的请求“插槽”打开,则为一直在等待的请求返回错误接下来运行的请求101...102...x的顺序并不重要当前版本完全不可用:timeout:=time.After(10*time.Minute)tick:=time.Tick(15*time.Second)fullcmdfirst:=fmt.Sprint