title: Why kotlin coroutines are considered light weight?
body: <p>If coroutines is still using threads to run code in parallel why it is considered light weight?</p>
  <p>In my understanding kotlin's <code>suspend</code> functions is transformed by compiler into state machine where each branch can be run on the same or different thread defined by developer. Coroutine builder, e,g, <code>launch{}</code>, responsible for that and <code>CoroutineContext</code> is what defines a thread to run on.</p>
  <p>Parallelism achieved by sending block of code to the thread pool which leverage the same threads</p>
  <p>There was a benchmark on 100k coroutines and 100k threads where coroutines pass without issue and threads throw exception (likely OutOfMemory). It brings me to idea I am missing something here.</p>
  <p>Could you help me to understand what is missed here what makes coroutines run code block 100k in parallel without exceeding memory limits like threads do?</p>