Сейчас многие интересуются языками, поддерживающими несколько взаимодействующих потоков управления (Erlang, Clojure, Go). В них зелёные нити используются, в основном, для организации многозадачности (concurrency). В качестве моделей многозадачности используются CSP или Actor model. То есть программа строится из объектов-акторов, имеющих свою зелёную нить и обменивающихся сообщениями (синхронно или асинхронно).
Конечно хорошо, когда объекты перестают быть просто процедурами, связанными одной нитью и одним стеком вызовов. Это полезно, например, для серверов с множеством объектов-соединений и общими ресурсами. Однако подобное многозадачное ООП — не единственный способ занять процессоры. К тому же существуют и другие задачи.
Многие задачи по своей природе не объектные, а функциональные. Для них модели типа CSP или Actor model — не более, чем возможный способ ускорения обработки. Вместо многозадачности (concurrency) здесь на первый план выступает параллельность (parallel programming). Достаточно большое число реальных задач хорошо ложится именно в этот класс. В предметной области таких задач нет ни слова про объекты и сообщения, но есть чисто техническая (ладно, математическая) возможность произвести часть вычислений параллельно.
Средства параллельности можно реализовывать поверх средств многозадачности, но можно и иметь их встроенными в язык, хотя бы в виде библиотек. Иначе получается, что для решения функциональной задачи приходится писать объектно-ориентированный код.
Некоторые известные типы параллельной обработки: