История изменений
Исправление quasimoto, (текущая версия) :
Ещё раз — не нужно про языки («параллельные» и «конкурентные» языки — нет, так говорить плохо :)), нужно про конкретные языковые средства (и даже библиотечные). Тут интересно как конкурентность достигается в рантаймах Erlang и GHC — в одном треде ОС могут существовать тысячи их лёгких тредов взаимодействующих с IO тем же мультиплексированием и планируемых рантаймом, самих тредов ОС рантайму достаточно по количеству ядер (можно больше если нужно, и это уже параллелизм), прямая аналогия с nginx, только видим где языковые средства конкурентности (forkIO и spawn). В GHC ещё есть языковые средства параллелизма — http://www.haskell.org/ghc/docs/latest/html/users_guide/lang-parallel.html :
The expression (x `par` y) sparks the evaluation of x (to weak head normal form) and returns y. Sparks are queued for execution in FIFO order, but are not executed immediately. If the runtime detects that there is an idle CPU, then it may convert a spark into a real thread, and run the new thread on the idle CPU. In this way the available parallelism is spread amongst the real CPUs.
Concurrent Haskell != Parallel Haskell. Совсем.
В принципе, аналогия с ядерным планировщиком тоже на поверхности — он нужен для конкурентности, в случае SMP она будет поддерживаться аппаратным параллелизмом.
Исходная версия quasimoto, :
Ещё раз — не нужно про языки («параллельные» и «конкурентные» языки — нет, так говорить плохо :)), нужно про конкретные языковые средства (и даже библиотечные). Тут интересно как конкурентность достигается в рантаймах Erlang и GHC — в одном треде ОС могут существовать тысячи их лёгких тредов взаимодействующих с IO тем же мультиплексированием и планируемых рантаймом, самих тредов ОС рантайму достаточно по количеству ядер (можно больше если нужно, и это уже параллелизм), прямая аналогия с nginx, только видим где языковые средства конкурентности (forkIO и spawn). В GHC ещё есть языковые средства параллелизма — http://www.haskell.org/ghc/docs/latest/html/users_guide/lang-parallel.html:
The expression (x `par` y) sparks the evaluation of x (to weak head normal form) and returns y. Sparks are queued for execution in FIFO order, but are not executed immediately. If the runtime detects that there is an idle CPU, then it may convert a spark into a real thread, and run the new thread on the idle CPU. In this way the available parallelism is spread amongst the real CPUs.
Concurrent Haskell != Parallel Haskell. Совсем.
В принципе, аналогия с ядерным планировщиком тоже на поверхности — он нужен для конкурентности, в случае SMP она будет поддерживаться аппаратным параллелизмом.