История изменений
Исправление loz, (текущая версия) :
В ерланге в момент системного вызова будет останов процесса
Нашел обсуждение этого, в теории останов процесса может случится, но на практике этого не происходит:
Generally, no. The most expensive system calls (usually IO) will use kqueue, epoll, or select (the first two if you use the «+K true» flag on the command line). Other calls may use async threads so that they do not block the scheduler.
В го на блокирующих корутина может на другое ядро перепрыгнуть (в отличие от Erlang).
Откуда инфа что в эрланге не может?
Кстати, «каждая элементарная операция» в функции X() -> X(). присутствует? Или вызов такой функции повесит ерланг?
Не повесил (на 8 ядрах):
2> F = fun F() -> F() end.
#Fun<erl_eval.44.99386804>
3>
3>
3> Pids = [spawn(F) || _ <- lists:seq(1, 20)].
[<0.69.0>,<0.70.0>,<0.71.0>,<0.72.0>,<0.73.0>,<0.74.0>,
<0.75.0>,<0.76.0>,<0.77.0>,<0.78.0>,<0.79.0>,<0.80.0>,
<0.81.0>,<0.82.0>,<0.83.0>,<0.84.0>,<0.85.0>,<0.86.0>,
<0.87.0>,<0.88.0>]
4> [erlang:process_info(P, status) || P <- Pids].
[{status,runnable},
{status,running},
{status,runnable},
{status,running},
{status,runnable},
{status,runnable},
{status,garbage_collecting},
{status,runnable},
{status,running},
{status,runnable},
{status,running},
{status,runnable},
{status,runnable},
{status,runnable},
{status,runnable},
{status,running},
{status,runnable},
{status,runnable},
{status,running},
{status,running}]
Исходная версия loz, :
В ерланге в момент системного вызова будет останов процесса
Нашел обсуждение этого, в теории останов процесса может случится, но на практике этого не происходит:
Generally, no. The most expensive system calls (usually IO) will use kqueue, epoll, or select (the first two if you use the «+K true» flag on the command line). Other calls may use async threads so that they do not block the scheduler.
В го на блокирующих корутина может на другое ядро перепрыгнуть (в отличие от Erlang).
Откуда инфа что в эрланге не может?
Кстати, «каждая элементарная операция» в функции X() -> X(). присутствует? Или вызов такой функции повесит ерланг?
Не повесил:
2> F = fun F() -> F() end.
#Fun<erl_eval.44.99386804>
3>
3>
3> Pids = [spawn(F) || _ <- lists:seq(1, 20)].
[<0.69.0>,<0.70.0>,<0.71.0>,<0.72.0>,<0.73.0>,<0.74.0>,
<0.75.0>,<0.76.0>,<0.77.0>,<0.78.0>,<0.79.0>,<0.80.0>,
<0.81.0>,<0.82.0>,<0.83.0>,<0.84.0>,<0.85.0>,<0.86.0>,
<0.87.0>,<0.88.0>]
4> [erlang:process_info(P, status) || P <- Pids].
[{status,runnable},
{status,running},
{status,runnable},
{status,running},
{status,runnable},
{status,runnable},
{status,garbage_collecting},
{status,runnable},
{status,running},
{status,runnable},
{status,running},
{status,runnable},
{status,runnable},
{status,runnable},
{status,runnable},
{status,running},
{status,runnable},
{status,runnable},
{status,running},
{status,running}]