LINUX.ORG.RU

Откуда идет эта модель вычислений?


0

1

Что то я чувствовал, инстинктивно, порочное в этом вашем программировании, но не понимал что именно. А сегодня (с бодуна) начало доходить. Возврат управления в точку вызова, в самом широком смысле. Есть код

instruction1;
instruction2;
...
пока не исполнится instruction1; instruction2; не начнет выполнятся, обычно так, по-дефолту. А должно быть все асинхронно. Управление никуда не должно возвращатся. Любую хрень можно передать через переменную. Так по-дефолту все должно работать, а если надо обеспечивать порядок выполнения, это реализовывать отдельно.

Сейчас, частично к этому приходят, например в JS, асинхронщина щас рулит, но как-то по уродски это все сделано, через колбеки, а надо чтоб по дефолту это было везде.

Традиционная модель должна быть deprecated и considered harmful. Я вообще не понимаю, откуда это все взялось-повелось, идиоты сидели у истоков CS, очевидно.



Последнее исправление: avtoritetniy-expert (всего исправлений: 1)
Ответ на: комментарий от gh0stwizard

Потому-что птредс - стандартная либа для потоков в юниксах. Если тебе нужен смп в твоей вм то очевидно лучшим решением будет птредс. Только вангую, что даже если ты создашь пару миллионов процессов в эрланг вм с наружи она всё равно запустит ровно столько птредс потоков, сколько у тебя ядер. Ну может плюс один на всякий случай. Т.е. ерланг процессы к птредсу сами по себе отношения не имеют ни малейшего.

nanoolinux ★★★★
()
Ответ на: комментарий от nanoolinux

если ты создашь пару миллионов процессов в эрланг вм с наружи она всё равно запустит ровно столько птредс потоков, сколько у тебя ядер.

Так и есть, ВМ создает в системе ровно столько потоков сколько есть ядер у машины, далее поверх них реализует свои «легковесные » потоки, время выполнения которых считается по редукциям, а не по таймеру или «пока оно там не выполнится до конца и само переключится», просто процесс стопается и кидается снова в очередь. Такая себе soft real time система.

А вообще эти эрланговские процессы очень и очень удобная для программирования абстракция, когда все разруливает сама ВМ и не надо городить мьютексы и прочий низкоуровневый огород. Никаких гонок, взаимных блокировок и прочих «радостей».

anonymous
()
Ответ на: комментарий от tailgunner

Хватило таланта даже такую элегантную модель сломать? А можно пример? Кроме банального: поток 1 пересылает сообщение потоку 2 которое он пересылает потоку 1. :)

anonymous
()
Ответ на: комментарий от mix_mix

Occam тут уже просклоняли, так что гуляй мимо.

anonymous
()
Ответ на: комментарий от dikiy

Сраная скобкота не нужна. И никакой асинхронности там нет. На лишпеге был написан асинхронный cells, но его потом на кучу других языков портанули.

anonymous
()
Ответ на: комментарий от anonymous

поток 1 пересылает сообщение потоку 2 которое он пересылает потоку 1. :)

А где тут блокировка? Взаимная блокировка, это когда поток 1 блокирует ресурс 1 и ждет освобождения ресурса 2, а поток 2 блокирует ресурс 2 и ждет освобождение ресурса 1.

anonymous
()
Ответ на: комментарий от anonymous

Я знаю, просто это слишком специально надо делать в эрланге.

anonymous
()

Хмм, Вы в примитивном виде сформулировали одну из идей функционального программирования (http://ru.wikipedia.org/wiki/Функциональное_программирование).

Современные компиляторы (GCC, clang) имеют правильно обрабатывать (оптимизировать вызовы) функции которые можно считать «чистыми» и «постоянными». См. __attribute__((const)), __attribute__((pure)) в https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Function-Attributes.html. Причем это работает даже в «алгоритмических» языках типа С/С++.

abalakin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.