Не думаю, что назвал бы это обманом. Основное принципиальное различие между несколькими потоками и несколькими процессами заключается в том, что несколько потоков совместно используют одно адресное пространство. Таким образом, указание нескольких потоков (а не нескольких процессов) кажется мне молчаливым разрешением воспользоваться общим адресным пространством (по крайней мере, в отсутствие какого-то очень специфического определения «передачи», запрещающего это).
Что сводится к следующему: у Эрланга на самом деле нет потоков как таковых - у него есть процессы с асинхронной связью. Процессы (преднамеренно) в значительной степени изолированы друг от друга. С одной стороны, это значительно облегчает разработку - в частности, один процесс может влиять на другой только через определенные, четко определенные каналы связи. Под капотом он использует множество хитростей (почти наверняка, включая разделяемую память) для оптимизации своих процессов и использования преимуществ, которые возможны в конкретной реализации / ситуации (например, все процессы, выполняющиеся в едином совместно используемом адресном пространстве). Тем не менее, необходимость скрывать все уловки не дает ему быть столь же эффективным, как что-то вроде версии C, где «уловки» все явные и полностью раскрыты.
Я бы использовал реальную аналогию, чтобы объяснить разницу. Думайте о потоках / процессах как о людях. Эрланг налаживает профессиональные рабочие отношения, где все сообщения тщательно записываются в записках. Версии C и C ++ больше похожи на мужа и жену, которые могут общаться одним словом, которое ни для кого не значит, или даже одним быстрым взглядом.
Последний чрезвычайно эффективен, когда он работает, но он гораздо более открыт для тонких недоразумений, и если у двоих будет драка, вы, вероятно, не захотите находиться в одной комнате. Менеджеру намного проще управлять людьми, находящимися в чисто профессиональных отношениях, даже если их максимальная эффективность не слишком высока.