LINUX.ORG.RU

История изменений

Исправление 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}]