title: What are the disadvantages of an M:N threading model (e.g. goroutines)?
body: <p><a href="https://en.wikipedia.org/wiki/Thread_(computing)#M:N_.28hybrid_threading.29" rel="noreferrer">M:N threading</a> is a model which maps M user threads onto N kernel threads. This enables a large number (M) of user threads to be created, due to their light weight, which still allowing (N-way) parallelism.</p>
  
  <p>This seems like a win-win to me, so why do so few languages/implementations use this threading model? The only examples I am aware of are Go's "goroutines" and Erlang's processes.</p>
  
  <p>What are the disadvantages of M:N threading? Why do other languages not use this threading model that, on the surface, seems so promising?</p>