Non-blocking programming

by Roman Elizarov 

Thursday, 08 June 2017 15.00 @ Room 2

Server-side workstations routinely have dozens of CPU cores and dozens of gigabytes of memory. It is great, because it enables writing application that manipulate large datasets entirely in memory (e.g. very fast) while serving lots of simultaneous requests. However, this means writing concurrent applications in their hardest form — ones that manipulate shared state. It is straightforward to do with blocking (locks), but locks limit scalability of the resulting code.

In this talk, we’ll go over motivation for writing non-blocking code and contrast it with blocking one. This talk assumes some familiarity with concurrent data structures and locks. We’ll do a deep dive into lesser-known corners of concurrent programming — writing code that waits for something to happen (an element to be enqueued, an event to arrive, etc). We will show that, contrary to the popular belief, blocking is not that same as waiting and show how you can write Java code that waits without blocking.