Skip to main content

Posts

Showing posts from February, 2020

Goroutines

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. Simi