# Asynchronous Programming Coroutines again, this time in a very practical context: ‹asyncio› (finally). We will be writing both clients and servers using a modern approach based on an IO dispatch loop (bundled with ‹asyncio›) and suspending coroutines. I am sure you will be happy to learn that ‹asyncio› is essentially what ‹node.js› is for JavaScript (and we all know how popular that is). Low latency, high-throughput applications, here we come (yes, I know it's Python). Demonstrations: 1. (to be done) Practice exercises: 1. ‹sem› – semaphore synchronisation in ‹asyncio› 2. ‹proc› – ‹asyncio› processes 3. ‹multi› – more processes 4. ‹tcp› – a simple TCP echo server 5. ‹http› – an HTTP client with a subprocess 6. ‹merge› – process data from multiple sockets Regular exercises: 1. ‹sleep› – sleep, running tasks in parallel 2. ‹counter› – two-way communication with a process 3. ‹pipeline› – multi-stage asynchronous processing 4. ‹tokenize› – another stream pipeline exercise 5. ‹minilisp› – an asynchronous parser 6. ‹rot13› – listening on UNIX domain sockets Voluntary exercises: 1. (nothing here yet)