https://github.com/golang/go/wiki/CommonMistakes
CommonMistakes
https://golang.org/doc/faq#closures_and_goroutines
Why is there no goroutine ID? ¶
Goroutines do not have names; they are just anonymous workers. They expose no unique identifier, name, or data structure to the programmer. Some people are surprised by this, expecting the go
statement to return some item that can be used to access and control the goroutine later.
The fundamental reason goroutines are anonymous is so that the full Go language is available when programming concurrent code. By contrast, the usage patterns that develop when threads and goroutines are named can restrict what a library using them can do.
Here is an illustration of the difficulties. Once one names a goroutine and constructs a model around it, it becomes special, and one is tempted to associate all computation with that goroutine, ignoring the possibility of using multiple, possibly shared goroutines for the processing. If the net/http
package associated per-request state with a goroutine, clients would be unable to use more goroutines when serving a request.
Moreover, experience with libraries such as those for graphics systems that require all processing to occur on the "main thread" has shown how awkward and limiting the approach can be when deployed in a concurrent language. The very existence of a special thread or goroutine forces the programmer to distort the program to avoid crashes and other problems caused by inadvertently operating on the wrong thread.
For those cases where a particular goroutine is truly special, the language provides features such as channels that can be used in flexible ways to interact with it.
最新文章
- Switch重构处理
- oracle 监听启动、停止、查看命令
- BZOJ 1047: [HAOI2007]理想的正方形
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- case while for
- (实用篇)PHP中单引号与双引号的区别分析
- hdu 5682 zxa and leaf
- Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)
- 【风马一族_xml】xmlp之dtd1
- NOIP2001 一元三次方程求解
- linux环境下编码的问题
- jquery实现仿select列表的即时搜索及拼音搜索
- python入门(12)dict
- mybatis源码解读(二)——构建Configuration对象
- java linux sdk1.8
- echart.js在vue中使用
- NC nc开发工具java虚拟机参数
- 基于Spring Cloud的微服务入门教程
- Filter过滤器介绍