Re[6]: Go vs Erlang vs Elixir
От: chaotic-kotik  
Дата: 09.02.17 15:46
Оценка:
Здравствуйте, netch80, Вы писали:

N>Удобный пример — конвертилка чего-то внутреннего формата в сообщения протокола поверх TCP и отправлялка в мир.

N>На вход поступило N сообщений. Выбрали первое, сериализовали, вызвали отправку через gen_tcp:send(). Та через несколько уровней дошла до вызова порта и ожидания сообщения в ответ(!) о том, что порт отработал команду записи.
N>В это время процесс сидит в receive. Чтобы перебрать всю очередь и перейти в ожидание, ему нужно прошерстить N-1 сообщение (одно мы только что забрали). Дальше он ждёт (или не ждёт, если ответ порта уже успел прийти).
N>OK, осталось N-1. Та же процедура, пересканировать вход, пропустив N-2 сообщения.
N>И так далее.
N>То есть, если новых не поступит, время отработки пропорционально квадрату количества поступивших (точнее, каждый может подсчитать, чему равно N*(N-1)+(N-1)*(N-2)+(N-2)*(N-3)+..., но мне облом — асимпотически это равно N*N/2).

Т.е. это все в том случае, если используется selective receive. Тогда понятно, спасибо за разъяснения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.