- Distributed Computing with Go
- V.N. Nikhil Anurag
- 257字
- 2021-06-24 18:36:12
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.
- Extending Puppet
- Linux集群和自動化運維
- 高性能Linux服務器構建實戰:系統安全、故障排查、自動化運維與集群架構
- Windows Server 2012網絡操作系統企業應用案例詳解
- Windows Phone 8 Application Development Essentials
- macOS效率手冊
- Linux自動化運維:Shell與Ansible(微課版)
- 網絡操作系統教程:Windows Server 2016管理與配置
- Linux系統最佳實踐工具:命令行技術
- Introduction to R for Quantitative Finance
- Troubleshooting Docker
- HTML5 Enterprise Application Development
- Linux內核分析及應用
- CSS揭秘
- Mastering Sass