title: How can multithreading speed up an application (when threads can't run concurrently)?
body: <p>I'm learning about multithreading, but after reading some tutorials I'm sort of confused.
  I don't understand how multithreading can speed up an application.</p>
  
  <p>By intuition, I would say multithreading slows down an application, because you constantly have to wait for those semaphores.</p>
  
  <p>How and when can multithreading speed up an application, when threads can't run concurrently?</p>