Новосконструированные значения занимают новое положение на куче. Куча у каждого процесса своя.
Периодически (при достижении fullsweep или при уходе в hibernate) срабатывает GC и проходится по всей куче, удаляя ненужные значения и уплотняя старые.
Факт того, что все структуры данных в Эрланге персистентные (иммутабельные, функциональные) позволяет заявлять, что ссылки в куче "направлены в одну сторону": благодаря этому можно чистить кучу в один проход.
Таким образом, в Эрланге есть stop-the-world, просто он у каждого процесса свой, и длится недолго :)
Обидно, наказывают, того, кто уже капнул сообщением. Тем самым предоставляя преимущество тем, кто только собирается усугубить положение процесса с переполненным мейлбоксом. :D
Процессы, которые вызывают риск переполнения чьего-нибудь mailbox, выполняются медленнее, позволяя его разгрести.
Если вы про sender punish, который вроде (к моему ужасу :( ) умолчально включен, то он не очень работает. В противном случае, при избыточном логгировании, система прекращала бы работать до того, как сожрет всю память очередью gen_event'а логгера.
Дорогие нити. В виртуальной машине Erlang поддерживается пул системных нитей, которые выполняют его процессы, при этом стандартнаяя библиотека позволяет блокировать процесс, переиспользую нить. В JVM в акторах выполнять блокирующие операции не рекомендуется, так как они блокируют и нить из пула. Это очень мешает программированию. Как это решается в Quasar я при беглом взгяде не понял.
В Akka акторы — это просто объекты со сравнимым с Эрланговым оверхедом (около 300 байт).
Шедулер ActorSystem'а Akka'и — это просто "реактор", который занимается разрешением фьючеров в готовые значения.
Немногим отличается от beam, который периодически дает процессорное время эрло-процессам. А процессы совершают редукции, пока не получат готовые значения.
Да, Akka'у можно повесить вызвав, что-нибудь блокирующее из сторонней библиотеки. Но и beam тоже не оценит, вызов долгоиграющего NIF'а.
И в том, и в другом случае, обязательно надо знать, что за функции вызываешь. Казалось бы, очевидно...
Процессы, которые вызывают риск переполнения чьего-нибудь mailbox, выполняются медленнее, позволяя его разгрести.
Ahem. Насколько мне известно, erlang:send/2 может заблокировать исключительно по причине большого размера сообщения или из-за того, что слать надо на другую ноду (отсюда и появился erlang:send_nosuspend/2).
Проблемы консумера, неуспевающего прожёвывать свою очередь, положено решать отказывая в обслуживании (см. https://github.com/ferd/pobox).
1) Урок не мой. Я тут тоже мимо проходил.
2) Я всего лишь попытался помочь вам посмотреть на проблему с другого ракурса.
У вас, судя по всему, этого не вышло. Мне очень жаль. Могу попытаться донести до вас свою точку зрения ещё раз, если пожелаете.
3) «Клиент — вещь второстепенная и необязательная» — смею не согласиться. Пояснения могу предоставить на тех же условиях, что и к пункту #2.
> Алкоголь является депрессантом. Подавляет нормальное мышление и замедляет его. Человек становится
> доверчивым и теряет различие между хорошо/плохо. Подавляется самокритика. Пьющие люди — лучшие
> объекты для манипулирования.
Псилоцибин является галлюциногеном. Как-то влияет на мышление и делает черт побери что с ощущением времени. Человек становится недоверчивым. Даже к самому себе: поэтому он теряет твердую веру в то, что такое хорошо/плохо. Зашкаливает самокритика. Трипующие люди — наименее предсказуемые объекты для манипулирования.
Психоделический опыт получать нужно только хорошо изучив матчасть и желательно в присутствии человека, которому доверяешь. Которому, кстати, желательно быть трезвым. Крайне важно, правильное настроение и обстановка.
А у нас же на пост-советском пространстве есть обычай — с горя нажраться. Я не готов жить в одном месте с такими людьми, если им выдадут галлюциногены. А вы?
Периодически (при достижении fullsweep или при уходе в hibernate) срабатывает GC и проходится по всей куче, удаляя ненужные значения и уплотняя старые.
Факт того, что все структуры данных в Эрланге персистентные (иммутабельные, функциональные) позволяет заявлять, что ссылки в куче "направлены в одну сторону": благодаря этому можно чистить кучу в один проход.
Таким образом, в Эрланге есть stop-the-world, просто он у каждого процесса свой, и длится недолго :)
Если вы про sender punish, который вроде (к моему ужасу :( ) умолчально включен, то он не очень работает. В противном случае, при избыточном логгировании, система прекращала бы работать до того, как сожрет всю память очередью gen_event'а логгера.
В Akka акторы — это просто объекты со сравнимым с Эрланговым оверхедом (около 300 байт).
Шедулер ActorSystem'а Akka'и — это просто "реактор", который занимается разрешением фьючеров в готовые значения.
Немногим отличается от beam, который периодически дает процессорное время эрло-процессам. А процессы совершают редукции, пока не получат готовые значения.
Да, Akka'у можно повесить вызвав, что-нибудь блокирующее из сторонней библиотеки. Но и beam тоже не оценит, вызов долгоиграющего NIF'а.
И в том, и в другом случае, обязательно надо знать, что за функции вызываешь. Казалось бы, очевидно...
Ahem. Насколько мне известно, erlang:send/2 может заблокировать исключительно по причине большого размера сообщения или из-за того, что слать надо на другую ноду (отсюда и появился erlang:send_nosuspend/2).
Проблемы консумера, неуспевающего прожёвывать свою очередь, положено решать отказывая в обслуживании (см. https://github.com/ferd/pobox).
Речь, я полагаю, о блокирующих вызовах, укладывающих шедулер?
Не наезда ради для. Правда интересно.
Мне из минусов JVM кроме общей кучи (и как следствие stop-the-world) ничего в голову, просто, не приходит.
stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
Не в упрек, просто наблюдение.
Удачи вам в расширении! :)
2) Я всего лишь попытался помочь вам посмотреть на проблему с другого ракурса.
У вас, судя по всему, этого не вышло. Мне очень жаль. Могу попытаться донести до вас свою точку зрения ещё раз, если пожелаете.
3) «Клиент — вещь второстепенная и необязательная» — смею не согласиться. Пояснения могу предоставить на тех же условиях, что и к пункту #2.
Все гладко.
> доверчивым и теряет различие между хорошо/плохо. Подавляется самокритика. Пьющие люди — лучшие
> объекты для манипулирования.
Псилоцибин является галлюциногеном. Как-то влияет на мышление и делает черт побери что с ощущением времени. Человек становится недоверчивым. Даже к самому себе: поэтому он теряет твердую веру в то, что такое хорошо/плохо. Зашкаливает самокритика. Трипующие люди — наименее предсказуемые объекты для манипулирования.
Психоделический опыт получать нужно только хорошо изучив матчасть и желательно в присутствии человека, которому доверяешь. Которому, кстати, желательно быть трезвым. Крайне важно, правильное настроение и обстановка.
А у нас же на пост-советском пространстве есть обычай — с горя нажраться. Я не готов жить в одном месте с такими людьми, если им выдадут галлюциногены. А вы?