Если у меня есть программа, работающая с потоками и вызывающая в системе fork()
на основе Unix, скопированы ли потоки? Я знаю, что виртуальная память для текущего процесса копируется 1: 1, чтобы новый процесс порождался. Я знаю, что потоки имеют свой собственный стек в виртуальной памяти процесса. Таким образом, хотя бы стек потоков тоже должен быть скопирован. Тем не менее, я не знаю, есть ли что-то еще для потоков, которые не находятся в виртуальной памяти и, следовательно, НЕ копируются. Если нет, два процесса совместно используют потоки или они являются независимыми копиями?
От Open Group Base спецификации Выпуск 7, 2018 Edition, вилка :
источник
Первоначально «ответвление» было достигнуто путем записи задачи на диск, а затем вместо чтения в другом потоке (что было бы сделано, если поменять задачу на другой), путем изменения идентификатора задачи изображения, все еще находящегося в памяти, и продолжения с его выполнением (как новая задача). Это была очень простая модификация базового механизма переключения задач, когда только одна задача занимала бы оперативную память одновременно.
Конечно, когда управление памятью стало более сложным, эта схема была изменена в соответствии с новой средой.
источник