草庐IT

Goroutine-safe

全部标签

go - 如何阻止程序/goroutine?

我有一个程序可以触发两个在后台提供服务的goroutine。然后我想阻止主goroutine并让它们在后台运行。我想“永远”阻止,我不关心干净的导出。我应该怎么做?我可以在channel上等待,然后再也不发送任何东西。我可以睡个好觉。两者都感觉不太对我认为我可以调用一个更简单的block()函数?我正在做这个varichanint 最佳答案 您可以使用sync.WaitGroup您将其传递给每个goroutine。这是常见的方式在调用goroutine中等待它的child。但是,在您不关心结果的情况下,这也应该这样做:select{

go - 如何阻止程序/goroutine?

我有一个程序可以触发两个在后台提供服务的goroutine。然后我想阻止主goroutine并让它们在后台运行。我想“永远”阻止,我不关心干净的导出。我应该怎么做?我可以在channel上等待,然后再也不发送任何东西。我可以睡个好觉。两者都感觉不太对我认为我可以调用一个更简单的block()函数?我正在做这个varichanint 最佳答案 您可以使用sync.WaitGroup您将其传递给每个goroutine。这是常见的方式在调用goroutine中等待它的child。但是,在您不关心结果的情况下,这也应该这样做:select{

go - 这是在 golang 中终止 goroutine 的正确方法吗?

我正在构建一个需要启动自己的HTTP服务器的命令行应用程序。我的想法是在我的主程序中的goroutine中启动http服务器,如下所示:funcmain(){gomyserver()//performlotsoftime-consumingtasks}funcmyserver(){s:=&http.Server{Addr:":8080",Handler:MyHandler{},}log.Fatal(s.ListenAndServe())}我的主要功能需要能够告诉goroutine结束。由于网络服务器阻塞了ListenAndServe方法,因此无法通过sync.WaitGroup或cha

go - 这是在 golang 中终止 goroutine 的正确方法吗?

我正在构建一个需要启动自己的HTTP服务器的命令行应用程序。我的想法是在我的主程序中的goroutine中启动http服务器,如下所示:funcmain(){gomyserver()//performlotsoftime-consumingtasks}funcmyserver(){s:=&http.Server{Addr:":8080",Handler:MyHandler{},}log.Fatal(s.ListenAndServe())}我的主要功能需要能够告诉goroutine结束。由于网络服务器阻塞了ListenAndServe方法,因此无法通过sync.WaitGroup或cha

parallel-processing - goroutine 是否适用于大型、并行、受计算限制的问题?

对于数值问题,go-routines是否会先发制人地进行多任务处理?我对Go的精益设计、速度非常感兴趣,但最感兴趣的是channel是一流的对象。我希望最后一点可以通过它们应该允许的复杂互连模式,为大数据启用一类全新的深度分析算法。我的问题领域需要对流式传入数据进行实时计算绑定(bind)分析。数据可以划分为100到1000个“问题”,每个问题的计算时间为10到1000秒(即它们的粒度是高度可变的)。然而,在输出有意义之前,结果必须全部可用,即,假设有500个问题出现,并且必须解决所有500个问题,然后我才能使用它们中的任何一个。该应用程序必须能够扩展,可能解决数千个(但不太可能是数千

parallel-processing - goroutine 是否适用于大型、并行、受计算限制的问题?

对于数值问题,go-routines是否会先发制人地进行多任务处理?我对Go的精益设计、速度非常感兴趣,但最感兴趣的是channel是一流的对象。我希望最后一点可以通过它们应该允许的复杂互连模式,为大数据启用一类全新的深度分析算法。我的问题领域需要对流式传入数据进行实时计算绑定(bind)分析。数据可以划分为100到1000个“问题”,每个问题的计算时间为10到1000秒(即它们的粒度是高度可变的)。然而,在输出有意义之前,结果必须全部可用,即,假设有500个问题出现,并且必须解决所有500个问题,然后我才能使用它们中的任何一个。该应用程序必须能够扩展,可能解决数千个(但不太可能是数千

go - 在 goroutine 中使用指针接收器

我有一个带有指针接收器的方法,我想知道在这个方法的goroutine中使用这个指针接收器是否安全?还是我应该将这个指针接收器作为参数传递?例如:func(m*dummyStruct)doSomething{/*doabunchofstuff*/gofunc(){m.a=xm.doSomethingElse()}()returny}我知道将m作为参数传递给goroutine不会出错,但我想知道这是否非常必要 最佳答案 如果您要修改m的状态,则需要互斥锁和谨慎的锁定模式。除此之外,在大多数情况下,这会增加跨线程边界的上下文切换。这就是我

go - 在 goroutine 中使用指针接收器

我有一个带有指针接收器的方法,我想知道在这个方法的goroutine中使用这个指针接收器是否安全?还是我应该将这个指针接收器作为参数传递?例如:func(m*dummyStruct)doSomething{/*doabunchofstuff*/gofunc(){m.a=xm.doSomethingElse()}()returny}我知道将m作为参数传递给goroutine不会出错,但我想知道这是否非常必要 最佳答案 如果您要修改m的状态,则需要互斥锁和谨慎的锁定模式。除此之外,在大多数情况下,这会增加跨线程边界的上下文切换。这就是我

memory - 进程和Golang中的Goroutine一样吗?

对于下面的代码:funcmain(){goRtns:=runtime.NumGoroutine()fmt.Println("goroutines:",goRtns)}输出是1。但这是在一个“进程”中,没有明确调用goroutines:“在计算中,进程是正在执行的计算机程序的实例。它包含程序代码及其当前事件。根据操作系统(OS),进程可能由多个线程组成并发执行指令的执行。”也来自KrishnaSundarram的优秀博客文章“goroutines的工作原理”:http://blog.nindalf.com/how-goroutines-work/“goroutine的创建不需要太多内存—

memory - 进程和Golang中的Goroutine一样吗?

对于下面的代码:funcmain(){goRtns:=runtime.NumGoroutine()fmt.Println("goroutines:",goRtns)}输出是1。但这是在一个“进程”中,没有明确调用goroutines:“在计算中,进程是正在执行的计算机程序的实例。它包含程序代码及其当前事件。根据操作系统(OS),进程可能由多个线程组成并发执行指令的执行。”也来自KrishnaSundarram的优秀博客文章“goroutines的工作原理”:http://blog.nindalf.com/how-goroutines-work/“goroutine的创建不需要太多内存—