Goroutine is an abstraction of go runtime for parallelism and concurrency. Go on runtime has its scheduler, which distributes goroutines to OS threads. The scheduler is split for each native OS thread scheduler, and each scheduler can steal work from others.
I have done quite a lot of actor programming and know a little about different concurrency models. Go's goroutines can be compared to green threads or Erlang VM's processes, although the go community avoids making such comparisons.
The best part of go concurrency is that it is not based on relatively inefficient OS threads. Creating a thread and switching between them is an expensive operation both in CPU cycles and memory terms.
Goroutines should communicate with each other by messaging and not sharing memory. The Effective Go guide states that
Do not communicate by sharing memory; instead, share memory by communicating.
A Gouroutine can use a message channel to communicate with other goroutines. Similar to the actor model programming, it is a sort of a message box between one or more goroutines. Some write to it, some read from it.
In a project I am working on, we replaced a python script with a go program. It is part of a machine learning pipeline, so in essence, it is a glorified CSV writer. The python script was a real CPU and a memory hog, so we thought a go rewrite could reduce the resource usage.
What were the results?
We were IO-bound, so we did not get significant speed improvement, but we achieved some gains in reducing resource usage.
The python script took one core and 4G memory - everything it was given by Kubernetes - and then crashed.
The go program took all the resources as well but did not crash.
The bad part is that there is about 1.5 times code in the go program compared to the python script.
Edit:
My presentation about the subject https://www.youtube.com/watch?v=t-N3ag2rLI4
The python script took one core and 4G memory - everything it was given by Kubernetes - and then crashed.
The go program took all the resources as well but did not crash.
The bad part is that there is about 1.5 times code in the go program compared to the python script.
Edit:
My presentation about the subject https://www.youtube.com/watch?v=t-N3ag2rLI4
Comments
Post a Comment