Published on 16th Jul 2017
1 min read
Share this article onFor me learning concurrency have always been tricky; Every language has a different way to handle/emulate concurrency, for example, old languages like Java uses Threads and modern languages like NodeJS and Python uses something called as event loops for its asynchronous IO which is there to make IO based things concurrent.
Recently I started diving deep into concurrency in Golang and I wanted to start with a good "Hello World"
program for it. This time I thought of taking an unconventional way to write my first concurrent program. Going through various examples over the Internet I could not find anything that made it fun. I suddenly recalled Sleepsort and it was the ideal way (fun + new = <3) to learn concurrency.
For people who do not know what Sleep Sort is, the basic goes something like this:
spin n
threads/co-routine (or whatever concurrent element the language has) for n
numbers (to sort) and for each number x
wait for time proportional to x
(lets say x
seconds) and then print/collect the number.
This is a very basic Implementation of Sleep Sort in Golang using Go Routines and WaitGroup.
// prints a number of sleeping for n seconds
func sleepAndPrint(x int, wg *sync.WaitGroup) {
defer wg.Done()
// Sleeping for time proportional to value
time.Sleep(time.Duration(x) * time.Millisecond)
// Printing the value
fmt.Println(x)
}
// Sorts given integer slice using sleep sort
func Sort(numbers []int) {
var wg sync.WaitGroup
// Creating wait group that waits of len(numbers) of go routines to finish
wg.Add(len(numbers))
for _, x := range numbers {
// Spinning a Go routine
go sleepAndPrint(x, &wg)
}
// Waiting for all go routines to finish
wg.Wait()
}
I have published the code in a Github Repository. Feel free to fork and play around with it.
I encourage you to try it out, and trust me it is really fun to learn concurrency through this; Apart from running the basic sleep sort you should also try to do/learn with it. For example,
Concurrency essentials
You can also try to
If you find any interesting way to learn concurrency or any new use case here, please post a comment below. I would love to know them.
If you like what you read subscribe you can always subscribe to my newsletter and get the post delivered straight to your inbox. I write essays on various engineering topics and share it through my weekly newsletter 👇
Benchmark Pagination Strategies in MongoDB
Benchmark results for two pagination approaches for MongoDB....
2nd JunPublish python package on PyPI
If you have written something cool in Python and want to make it installable via pip and easy_instal...
10th NovThere are two ways through which we can stop an iterating loop, first by using break statement and s...
6th SepFast and Efficient Pagination in MongoDB
MongoDB is a document based data store and hence pagination is one of the most common use case of it...
6th Jun