官术网_书友最值得收藏!

Goroutines aren't predictable

In this chapter, we started by looking at how Go enables us to write code that is concurrent and, to an extent, parallel. Then we followed up with a discussion on how Go schedules goroutines over machines and processors. It is possible that we might be able to reason how the goroutines are going to be distributed over machines and processors, which in turn might let us write non-standard or hacky Go code.

Consider the code from the Parallelism section, where we tried to simulate listening to music while writing a few emails. Here is the output of the code for quick reference:

Done writing mail #3. 19:32:57
Listening... 19:32:57
Listening... 19:32:57
Done writing mail #1. 19:32:57
Listening... 19:32:57
Listening... 19:32:57
Done writing mail #2. 19:32:57

We can now easily infer that there were at least two Ps, and one of them was being used by the goroutine printing Listening..., while the other P was handling the goroutines related to writing emails.

This is all well and good, however consider the case where GOMAXPROCS is set to 1 or the system has low hardware capabilities which might result in fewer machines. It is possible that this might lead to the goroutine printing Listening... run forever and never giving control to the other goroutines. In reality, the Go compiler should detect this case and accordingly plan the scheduling of goroutines. However, it would be better to plan our code so that we do not have to rely on Go's scheduler and its current implementation.

主站蜘蛛池模板: 和硕县| 垦利县| 宽甸| 屏边| 汤原县| 乐陵市| 绥阳县| 封开县| 平果县| 商都县| 军事| 如皋市| 商南县| 老河口市| 福建省| 临潭县| 龙岩市| 嘉祥县| 郓城县| 大渡口区| 定州市| 浮山县| 安溪县| 厦门市| 莎车县| 定西市| 金乡县| 武穴市| 临洮县| 河南省| 木里| 蒲城县| 宜黄县| 枣强县| 勃利县| 井研县| 吴堡县| 新密市| 三台县| 金沙县| 嘉峪关市|