Расширение многозадачности на Linux. Модели потоков
🙀В Linux, создание процесса сродни порождению потока, потому что они создаются системным вызов clone(2):
✳️ на самом деле используется копирование при записи страниц памяти(copy-on-write pages), чтобы задержать или избежать вовсе копирование данных, которые могут быть разделены между дочерним и родительским потоком; ✳️ единственными накладными расходами по времени будут операции копирования таблицы страниц родителя и выделения уникального дескриптора потомка процесса, описываемый структурой task_struct.
⚠️ Недостатки и преимущества схем отображения пользовательских потоков к ядру выражается в их реализации:
✳️ с одной стороны, схема n:1 позволяет быстро выполнять пользовательские потоки, с другой стороны все пользовательские потоки необходимо увязать с потоками ядра, потому что только ядро может планировать поток на выполнение (захват) устройства центрального процессора(ЦПУ);
✳️ Недостаток схемы 1:1 по-сути заключается в том, что потоки на уровне ядра считаются медленными чем пользовательские, и примерно равны процессам, а преимуществом их является возможность создания изолированных потоков.
Поэтому, как показано ниже, clone(2) реализует две схемы отображения LWP к потоку на уровне ядра -- n:1 и 1:1 . ⤵️