из вики ясное объяснение
1: 1 (многопоточность на уровне ядра)
Потоки, созданные пользователем, находятся в 1-1 соответствии с планируемыми объектами в ядре. [3] Это простейшая возможная реализация потоков. Win32 использовал этот подход с самого начала. В Linux обычная библиотека C реализует этот подход (через NPTL или более старые LinuxThreads). Такой же подход используется в Solaris, NetBSD и FreeBSD.
N: 1 (многопоточность на уровне пользователя)
Модель N: 1 подразумевает, что все потоки уровня приложения отображаются на один запланированный объект уровня ядра; [3] ядро не знает о потоках приложения. При таком подходе переключение контекста может быть выполнено очень быстро и, кроме того, оно может быть реализовано даже на простых ядрах, которые не поддерживают многопоточность. Однако один из основных недостатков заключается в том, что он не может выиграть от аппаратного ускорения на многопоточных процессорах или многопроцессорных компьютерах: никогда не запланировано более одного потока одновременно. [3] Например: если одному из потоков необходимо выполнить запрос ввода-вывода, весь процесс блокируется, и преимущество использования потоков невозможно. В переносимых потоках GNU используются потоки на уровне пользователя, а также потоки состояний.
M: N (гибридная резьба)
M: N отображает некоторое количество M потоков приложений на некоторое число N объектов ядра, [3] или «виртуальных процессоров». Это компромисс между потоками на уровне ядра («1: 1») и на уровне пользователя («N: 1»). В общем случае системы потоков «M: N» более сложны для реализации, чем потоки ядра или пользователя, поскольку требуются изменения как ядра, так и кода пользовательского пространства. В реализации M: N библиотека потоков отвечает за планирование пользовательских потоков на доступных планируемых объектах; это делает переключение контекста потоков очень быстрым, поскольку позволяет избежать системных вызовов. Однако это увеличивает сложность и вероятность инверсии приоритетов, а также неоптимального планирования без обширной (и дорогостоящей) координации между планировщиком пользовательского пространства и планировщиком ядра.