Якими змістовними способами Ерланг перешкоджає гоночним умовам у паралельному програмуванні?


11

Читаючи про одночасність в Ерлані , мені нагадує інструментарій інструментарію паралельних змагань Akka . Обидва дають вам інструменти для запобігання або обмеження умов перегонів . Але ви можете надсилати посилання на змінні дані до інших процесів, використовуючи інструментарій Akka, який все ще небезпечний. Я вважаю, що Акка є корисним інструментом, але він не забезпечує захист від нестандартного доступу до об'єктів і даних, що призводить до умов перегонів, тупику та / або голоду. Це не заважає писати небезпечний код тим, як Java або C # захищає вас від написання більшості видів витоків пам’яті, які можна записати на C ++ (ви все одно можете створювати витоки пам’яті на Яві, перевіряючи смітник, але менше проблеми, ніж пам'ятати, щоб звільнити кожен виділений вами байт).

Чи гарантує Ерланг ступінь коректності, продуктивності та надійності при одночасному програмуванні? Я думаю, що операційні системи забезпечують захист під час доступу до системних ресурсів (якщо припустити, що автори драйверів виконали свою роботу добре). Бази даних ACID забезпечують захист для читання та оновлень. Тож, здається, це вирішувана проблема. Або загальне безпечне рішення призвело б до знищення підвищення продуктивності, яке забезпечує одночасність? Чи інші мови чи набори інструментів забезпечують таку сумісну безпеку, яку робить (чи ні) Ерланг?

Це додаткове запитання до коментаря @ Malfist щодо відповіді @ user1249 на те, Яка мова програмування генерує найменш важких помилок? .

Відповіді:


19

Є кілька речей, які Ерланг робить, щоб допомогти у цьому.

  • Дані незмінні, тому жодні дані не гоняться
  • OTP gen_servers та gen_fsm представляють дуже добре перевірену схему для серверів
  • Наглядові органи дозволяють відновити після аварій
  • процеси невеликі і дешеві
  • Пам'ять розподіляється на основі кожного процесу (без ГК заморожується)
  • erlang VM оптимізований для роботи при дуже великих навантаженнях
  • Програмне забезпечення може оновлюватися на ходу, тому жодних простоїв оновлення

Тут головне - це те, що в Ерланге немає загального стану, який міг би вимагати блокування, тому немає необхідності в блокуваннях. Це яскрава мова для програмних програм у режимі реального часу, які не потребують простоїв та високої толерантності та одночасності


12
@JarrodRoberson: Власне, головний момент - це не загальний стан, що змінюється . Стан спільного доступу не є проблемою, якщо ви не мутуєте його. Стан, що змінюється, не є проблемою, якщо ви не поділитесь ним.
Йорг W Міттаг

1
Також є новий інструмент Concuerror youtube.com/watch?v=FpkjKN9wTKg, який дозволяє запускати свої тести зі всіма можливими замовленнями на події
Zachary K
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.