где-то видел, что вызов fork() весьма дорогой, это делается как-то иначе? И почему в C++ так долго не было многопоточности, если в Си есть pthreads? Не думаю, что была какая-то особая сложность написать обёртку на С++ или использовать их в том виде, в каком они были
потоки устроены в С++ так, как они устроены в ОС, на которой оно исполняется ( так как используются системные потоки)
на виндусе винапи потоки
Вызов FORK дорогой на WINDOWS, где он не реализован на уровне системы, и эмулирует всякими слоями-эмуляторами POSIX. А на Unix он вполне дешёвый. На Linux, где это было заложено в операционную систему с рождения как особая цель, fork и создание потока - это вообще одна операция, только флагами отличается. Да и вообще поток и процесс в линуксе - одно и то же, отличается только флагами управления разделением памяти , в потоках не разделяется, в процессах - разделяется по COW. Пожалуйста, не нужно порождать мифы, и так их уже много. "Я слышал, что..." должно тебе быть поводом чтобы перечитать эту информацию и уложить в своей голове правильно.
Про сложности - тоже полуправда. Это очень сложно. В основном как раз из-за fork, которой был в Unix-ах, а в Win его не было, зато были с рождения (платформы Win NT) потоки, которых наоборот не было трпдиционно в Unix. И вот наконец когда POSIX добил стандарт потоков, и была написана pthreads, да ещё она по всем операционкам стала реализована, только тогда можно было писать общую стандартную библиотеку многопоточности в С++. Которая , опять таки, реализована на базе POSIX API, потому что оно менее функционально, оно уже API Win в этом вопросе. А тут такой приходит некий Либер и пишет "ну, я не думаю, что потоки так сложно сделать, во всех остальных языках же есть потоки"... Ну мало того, что нет их везде, например, в Питоне, да ещё и написаны этим все языки на С или С++, с ломом и той самой матерью на #define ах определяющие потоки для этих самых языков на разных платформах, чтобы им там жилось сладко...
Обсуждают сегодня