原文链接:Concurrency Trap #2: Incomplete Work (ardanlabs.com) 简介 在我的上一篇博文[译]Goroutine Leaks - The Forgotten Sender中,我提到了并发是一个非常有用的工具,但是并发往往伴随着特定的陷阱,而这些不会在同步编程中出现。本文会继续这个主题,在本文中我将介绍一个名为未完成的工作的陷阱。未完成的工作发生于在仍然有未完成的Goroutine(非main goroutine)存在的时候程序终止退出了。发生这种情况时,Goroutine的本质使得它会被强制退出,这可能是一个严重的问题。 未完成的工作 为了说明什么是未完成的工作,请观察下面的例子。 …
阅读更多原文链接:Goroutine Leaks - The Forgotten Sender (ardanlabs.com) 简介 并发编程可以让程序员以多个执行路径来解决问题,而且通常是试图提高程序性能。并发并不意味着这些执行路径是以并行的方式执行,而是说这些执行路径以无序异步的方式执行而不是同步顺序执行。历史上这种编程模型是通过标准款或者第三方库来实现的。 Go语言中,并发特性是通过语言内置的Goroutine和channel来实现,这样就减少了对库的依赖。这容易给人一种错觉,觉得使用Go来编写并发程序会很简单。你得非常小心,因为如果你没有正确的使用Go的并发特性,往往会引入特定的边界效应或者调入陷阱。一不小心,这些陷阱就会给你程序带 …
阅读更多