这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同:无缓冲…

“这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同:无缓冲的通道保证进行发送和接收的goroutine会在同一时间进行数据交换;有缓冲的通道没有这种保证。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

当一个资源需要在goroutine之间共享时,通道在goro…

“当一个资源需要在goroutine之间共享时,通道在goroutine之间架起了一个管道,并提供了确保同步交换数据的机制。声明通道时,需要指定将要被共享的数据的类型。可以通过通道共享内置类型、命名类型、结构类型和引用类型的值或者指针。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

在Go语言里,你不仅可以使用原子函数和互斥锁来保证对共享资源…

“在Go语言里,你不仅可以使用原子函数和互斥锁来保证对共享资源的安全访问以及消除竞争状态,还可以使用通道,通过发送和接收需要共享的资源,在goroutine之间做同步。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

互斥锁这个名字来自互斥(mutual exclusion)的…

“互斥锁这个名字来自互斥(mutual exclusion)的概念。互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

另外两个有用的原子函数是LoadInt64和StoreInt…

“另外两个有用的原子函数是LoadInt64和StoreInt64。这两个函数提供了一种安全地读和写一个整型值的方式。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

用了atmoic包的AddInt64函数。这个函数会同步整型…

“用了atmoic包的AddInt64函数。这个函数会同步整型值的加法,方法是强制同一时刻只能有一个goroutine运行并完成这个加法操作。当goroutine试图去调用任何原子函数时,这些goroutine都会自动根据所引用的变量做同步处理。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

竞争状态的存在是让并发程序变得复杂的地方,十分容易引起潜在问…

“竞争状态的存在是让并发程序变得复杂的地方,十分容易引起潜在问题。对一个共享资源的读和写操作必须是原子化的,换句话说,同一时刻只能有一个goroutine对共享资源进行读和写操作。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

这种哲学的特征是:第一,一种以艺术眼光对人生的天赋才能;第二…

“这种哲学的特征是:第一,一种以艺术眼光对人生的天赋才能;第二,一种于哲理上有意识地回到简单;第三,一种合理近情的生活理想。最后的产品就是一种对于诗人、农夫和放浪者的崇拜,这是可怪的。”

—— “生活的艺术(林语堂独家授权作品)(博集文学典藏系列)” by 林语堂

标签:  2018年9月3日

因为中国人的哲学里有健全的现实意识,纯然的动物意识和一种明理…

“因为中国人的哲学里有健全的现实意识,纯然的动物意识和一种明理的精神,因此反而压倒了理性本身,使呆板的哲学体系无从产生。中国有儒道释三教,每一种教都是宏大的哲学体系,但它们都曾被健全的常识冲淡,因而都变成追求人生幸福的共同问题。中国人对任何一个哲学观念、信仰、派别,都不愿专心地相信,或过分起劲地去研究。”

—— “生活的艺术(林语堂独家授权作品)(博集文学典藏系列)” by 林语堂

标签:  2018年9月3日

并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关…

“并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发是指同时管理很多事情,这些事情可能只做了一半就被暂停去做别的事情了。在很多情况下,并发的效果比并行好,因为操作系统和硬件的总资源一般很少,但能支持系统同时做很多事情。这种“使用较少的资源做更多的事情”的哲学,也是指导Go语言设计的哲学。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

如果一个goroutine需要做一个网络I/O调用,流程上会…

“如果一个goroutine需要做一个网络I/O调用,流程上会有些不一样。在这种情况下,goroutine会和逻辑处理器分离,并移到集成了网络轮询器的运行时。一旦该轮询器指示某个网络读或者写操作已经就绪,对应的goroutine就会重新分配到逻辑处理器上来完成操作。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

在1.5版本①上,Go语言的运行时默认会为每个可用的物理处理…

“在1.5版本①上,Go语言的运行时默认会为每个可用的物理处理器分配一个逻辑处理器。在1.5版本之前的版本中,默认给整个应用程序只分配一个逻辑处理器。这些逻辑处理器会用于执行所有被创建的goroutine。即便只有一个逻辑处理器,Go也可以以神奇的效率和性能,并发调度无数个goroutine。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

一个线程是一个执行空间,这个空间会被操作系统调度来运行函数中…

“一个线程是一个执行空间,这个空间会被操作系统调度来运行函数中所写的代码。每个进程至少包含一个线程,每个进程的初始线程被称作主线程。因为执行这个线程的空间是应用程序的本身的空间,所以当主线程终止时,应用程序也会终止。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

CSP是一种消息传递模型,通过在goroutine之间传递数…

“CSP是一种消息传递模型,通过在goroutine之间传递数据来传递消息,而不是对数据进行加锁来实现同步访问。用于在goroutine之间同步和传递数据的关键数据类型叫作通道(channel)。对于没有使用过通道写并发程序的程序员来说,通道会让他们感觉神奇而兴奋。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。…

“Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为goroutine时,Go会将其视为一个独立的工作单元。这个单元会被调度到可用的逻辑处理器上执行。Go语言运行时的调度器是一个复杂的软件,能管理被创建的所有goroutine并为其分配执行时间。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

要让这个行为可行,需要两个理由。第一,公开或者未公开的标识符…

“要让这个行为可行,需要两个理由。第一,公开或者未公开的标识符,不是一个值。第二,短变量声明操作符,有能力捕获引用的类型,并创建一个未公开的类型的变量。永远不能显式创建一个未公开的类型的变量,不过短变量声明操作符可以这么做。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

当一个标识符的名字以小写字母开头时,这个标识符就是未公开的,…

“当一个标识符的名字以小写字母开头时,这个标识符就是未公开的,即包外的代码不可见。如果一个标识符以大写字母开头,这个标识符就是公开的,即被包外的代码可见。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

这表明,如果外部类型实现了notify方法,内部类型的实现就…

“这表明,如果外部类型实现了notify方法,内部类型的实现就不会被提升。不过内部类型的值一直存在,因此还可以通过直接访问内部类型的值,来调用没有被提升的内部类型实现的方法。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

由于内部类型的提升,内部类型实现的接口会自动提升到外部类型。…

“由于内部类型的提升,内部类型实现的接口会自动提升到外部类型。这意味着由于内部类型的实现,外部类型也同样实现了这个接口。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日

通过嵌入类型,与内部类型相关的标识符会提升到外部类型上。这些…

“通过嵌入类型,与内部类型相关的标识符会提升到外部类型上。这些被提升的标识符就像直接声明在外部类型里的标识符一样,也是外部类型的一部分。这样外部类型就组合了内部类型包含的所有属性,并且可以添加新的字段和方法。外部类型也可以通过声明与内部类型标识符同名的标识符来覆盖内部标识符的字段或者方法。这就是扩展或者修改已有类型的方法。”

—— “Go语言实战(异步图书)” by 威廉·肯尼迪(William Kennedy), 布赖恩·克特森(ian Ketelsen), 埃里克·圣马丁(BrErik St. Martin), 李兆海

标签:  2018年9月3日