title: How do user level threads (ULTs) and kernel level threads (KLTs) differ with regards to concurrent execution?
body: <p>Here's what I understand; please correct/add to it:</p>
  
  <p>In pure ULTs, the multithreaded process itself does the thread scheduling. So, the kernel essentially does not notice the difference and considers it a single-thread process. If one thread makes a blocking system call, the entire process is blocked. <strong>Even on a multicore processor, only one thread of the process would running at a time, unless the process is blocked.</strong> I'm not sure how ULTs are much help though.</p>
  
  <p>In pure KLTs, even if a thread is blocked, the kernel schedules another (ready) thread of the same process. (In case of pure KLTs, I'm assuming the kernel creates all the threads of the process.)</p>
  
  <p>Also, using a combination of ULTs and KLTs, how are ULTs mapped into KLTs?</p>