草庐IT

Goroutine-safe

全部标签

go - Go 程序的主 goroutine 和派生 goroutine 之间的区别

当使用gRPC创建服务器时,如果我在主进程中启动gRPC服务器,它可以处理来自客户端的请求(数千)。但是,如果我将服务器作为goroutine启动,它只能处理一些请求(数百个)并且在卡住之后。我已经通过一个非常简单的示例google.golang.org/grpc/examples/helloworld测试并确认了这一点。是否因为生成的goroutine堆栈大小非常小(2Kbytes),而主goroutine大得多?maingoroutine和spawnedgoroutine有什么区别?示例link.示例修改部分如下。greeter_server/main.gofuncmain(){g

go - Go 程序的主 goroutine 和派生 goroutine 之间的区别

当使用gRPC创建服务器时,如果我在主进程中启动gRPC服务器,它可以处理来自客户端的请求(数千)。但是,如果我将服务器作为goroutine启动,它只能处理一些请求(数百个)并且在卡住之后。我已经通过一个非常简单的示例google.golang.org/grpc/examples/helloworld测试并确认了这一点。是否因为生成的goroutine堆栈大小非常小(2Kbytes),而主goroutine大得多?maingoroutine和spawnedgoroutine有什么区别?示例link.示例修改部分如下。greeter_server/main.gofuncmain(){g

go - 如何识别一个goroutine?

假设我有一堆goroutines的堆栈跟踪,e。例如:goroutine5633[select]:net/http.(*persistConn).writeLoop(0xc21303ac00)/usr/lib/go/src/pkg/net/http/transport.go:791+0x271createdbynet/http.(*Transport).dialConn/usr/lib/go/src/pkg/net/http/transport.go:529+0x61e在我的例子中,一个独特的特定于应用程序的对象由一组goroutines提供服务,我想查看与特定对象相关的gorouti

go - 如何识别一个goroutine?

假设我有一堆goroutines的堆栈跟踪,e。例如:goroutine5633[select]:net/http.(*persistConn).writeLoop(0xc21303ac00)/usr/lib/go/src/pkg/net/http/transport.go:791+0x271createdbynet/http.(*Transport).dialConn/usr/lib/go/src/pkg/net/http/transport.go:529+0x61e在我的例子中,一个独特的特定于应用程序的对象由一组goroutines提供服务,我想查看与特定对象相关的gorouti

http - Golang http 服务器在启动无限循环的 goroutine 时阻塞

正如我从golang文档中了解到的,如果我将runtime.GOMAXPROCS(8)设置为8核(inteli7)的cpu,然后启动一个无限循环的goroutine,其他goroutine不应该被阻塞,因为有足够的线程和goproc。但是当使用net/http包时情况并非如此,一个无限循环的goroutine将在几次调用后阻塞http服务器。谁能帮忙解释一下为什么?如果我注释掉“goinfiniteloop”这一行,在服务器之后启动客户端,客户端将输出1000个星号;但是如果我启用goroutine,客户端将在打印几个星号后阻塞我试过在goroutine中添加runtime.LockO

http - Golang http 服务器在启动无限循环的 goroutine 时阻塞

正如我从golang文档中了解到的,如果我将runtime.GOMAXPROCS(8)设置为8核(inteli7)的cpu,然后启动一个无限循环的goroutine,其他goroutine不应该被阻塞,因为有足够的线程和goproc。但是当使用net/http包时情况并非如此,一个无限循环的goroutine将在几次调用后阻塞http服务器。谁能帮忙解释一下为什么?如果我注释掉“goinfiniteloop”这一行,在服务器之后启动客户端,客户端将输出1000个星号;但是如果我启用goroutine,客户端将在打印几个星号后阻塞我试过在goroutine中添加runtime.LockO

go - 当我在 Goroutine 中填充它时,为什么这张 map 是空的?

typedriverstruct{variablesmap[string]string}varDrivers[]driverfuncmain(){driver:=driver{variables:make(map[string]string),}Drivers=append(Drivers,driver)driver.variables=make(map[string]string)//Commentingthislinemakesitwork,toodone:=make(chanbool)godriver.populate(done)我预计:map[a:b]实际结果:map[]Pla

go - 当我在 Goroutine 中填充它时,为什么这张 map 是空的?

typedriverstruct{variablesmap[string]string}varDrivers[]driverfuncmain(){driver:=driver{variables:make(map[string]string),}Drivers=append(Drivers,driver)driver.variables=make(map[string]string)//Commentingthislinemakesitwork,toodone:=make(chanbool)godriver.populate(done)我预计:map[a:b]实际结果:map[]Pla

testing - 如何在不等待测试的情况下在goroutine中测试结果

我在做golang的时候,有时候需要在goroutine中测试结果,我是用time.Sleep来测试的,请问有没有更好的测试方法。假设我有这样的示例代码funcHello(){gofunc(){//dosomethingandstoretheresultforexampleindb}()//dosomething}然后当我测试func时,我想在goroutine中测试两个结果,我这样做:funcTestHello(t*testing.T){Hello()time.Sleep(time.Second)//sleepforawhilesothatgoroutinecanfinish//te

testing - 如何在不等待测试的情况下在goroutine中测试结果

我在做golang的时候,有时候需要在goroutine中测试结果,我是用time.Sleep来测试的,请问有没有更好的测试方法。假设我有这样的示例代码funcHello(){gofunc(){//dosomethingandstoretheresultforexampleindb}()//dosomething}然后当我测试func时,我想在goroutine中测试两个结果,我这样做:funcTestHello(t*testing.T){Hello()time.Sleep(time.Second)//sleepforawhilesothatgoroutinecanfinish//te