Это сводится к потокам против процессов .
Операционные системы были специально разработаны таким образом, чтобы каждый «пользователь» думал, что у него есть целый компьютер, поэтому вы запускаете apache как пользователь wwwrun , например.
Программисты, будучи программистами, начали перегружать эту парадигму, сначала каждым человеком, выполняющим несколько «заданий». Поскольку операционные системы были предназначены для нескольких пользователей, верхний предел масштабирования этой архитектуры отражал верхний предел масштабирования для зарегистрированных пользователей - поэтому, например, apache начнет умирать при 4000 - 8000 пользователей.
Процессы - зрелая парадигма (мой процесс не может разрушить ваш). Когда мы начинаем видеть введение потоков, вещи начинают становиться совсем другими. Здесь у нас есть программы с внешними блокирующими действиями (ожидание на диске, ожидание на io, ожидание на память), желающие иметь возможность ждать с одной стороны, и работать с другой, а потоки позволяют вам сделать это и решить две проблемы:
вы не можете получить достаточно процессов, потому что операционная система не может справиться с этим
каждый процесс дорогостоящий, потому что по своей конструкции он предоставляет «пользователю» полную мощность операционной системы
Проблема с потоками заключается в том, что они нарушают разделение, для которого были разработаны процессы. Мой поток может удалить ваш поток - ошибки распространяются.
Если Эрланг отличается от других, это во многих отношениях. Докторская диссертация Джо Армстронга называется Создание надежных распределенных систем при наличии программных ошибок .
Надежность означает, что процессы лучше, чем потоки. Проблема в том, что процессы операционных систем слишком «дороги», потому что они предназначены для людей (у вас есть машина), а не для одновременных программ. В виртуальной машине Erlang виртуальная машина обладает всеми возможностями многопользовательской системы (она работает в процессе операционной системы), а каждый процесс Erlang обладает гораздо меньшим количеством параллельной мощности - если она хочет использовать «большую машину», она говорит с виртуальной машиной, которая делает это для этого. Таким образом, процессы Эрланга намного дешевле, чем рабочие процессы (и потоки). Вы просто икру, икру, икру. Изначально Erlang VM запускается с 2 ** 8 процессами, но вы можете увеличить его до миллионов (если у вас достаточно ОЗУ).
Кроме того, как сказал Джо в первой части первого раздела своей кандидатской диссертации, чтобы иметь надежное программное обеспечение, вам необходимо начать с двух компьютеров. С Erlang / OTP на время записи вы не знаете, на каком компьютере будет работать ваше программное обеспечение. Кластер Erlang / OTP во время выполнения будет распределять вашу вычислительную работу. Таким образом, процесс Erlang является нативно распределенным, как и spawn () (Erlang для fork ()) и перезапускает семантику.
Поскольку Erlang имеет свои собственные процессы, у него есть собственный планировщик и собственный загрузчик кода / двоичный формат (Erlang может интерпретироваться или может компилироваться в собственные двоичные файлы). Это дает группе дополнительные преимущества - перед тем, как написать приложение Erlang / OTP, оно может выполнить горячую замену своих двоичных файлов и т. Д. И т. Д.
Итак, вы можете писать многопоточные приложения на C ++ - но вы обязаны предотвратить распространение ошибок и обеспечить стабильность системы.
И, конечно, вы можете создавать надежное программное обеспечение на C - посмотрите на Erlang (виртуальная машина написана на C), смысл в том, зачем вам это нужно? В старые времена компании писали свои собственные «операционные системы», вы могли бы сейчас написать свою собственную операционную систему, но зачем вам это нужно? Существуют миллионы строк надежного проверенного кода, который «делает это», точно так же, как в системе Erlang / OTP, которая «делает это», 1,5 миллиона строк проверенного кода.
Использование Erlang - это использование вещей, написанных другими людьми, и создание только тех кусков, которые делают вашу компанию эффективной.