Thread scheduling isn't always optimal. User threads in separate processes. Thread switching is done by the kernel and all data are shared between threads. The thread package manages the standard thread calls to allow sharing data between threads. Lots of processes.
Thread creating is slow.
If one thread dies the rest are usually left hanging and you must kill them all before restarting. Thread switching is somewhat expensive. Thread switching is handled by the thread library or the kernel and is very fast. Everything is done in one process, but on some systems, ps may show the different threads. If one thread aborts the whole process aborts.