З 1970 по 2002 рік процесори збільшувались удвічі в швидкості приблизно кожні 18 місяців. Отже, як програміст, все, що вам потрібно було, це почекати, і ваша програма піде швидше. Проблема полягає в тому, що близько 2002 року правила змінилися. Тепер вони не роблять більших швидких процесорів, вони роблять менші повільні процесори, але розбивають їх у групи. На комп'ютері, на якому я зараз працюю, є 4 ядра, а мікросхеми до 8 ядер (і 4 потоки на ядро) існують. Незабаром у нас з’являться чіпи з набагато більшою кількістю ядер.
Отже, якщо ви пишете програму, яка зовсім не є одночасною, ви виявите, що ви використовуєте 1 ядро або нитку, але решта CPU сидить там і нічого не робить. Тож якщо у вас 16 ядер, 1 буде запускати вашу програму, а інші 15 сидять там!
Проблема з одночасністю полягає в тому, що вона не є детермінованою. Що означає, що ви точно не знаєте, в якому порядку будуть виконуватись різні потоки. Традиційно програмісти намагаються вирішити це за допомогою замків тощо. Це призвело до LOT болю. Наявність певної форми змінних станів, що більш ніж одна нитка може вільно отримувати доступ, часто є формулою для болю та хвороб!
З пізньої тенденції слід переходити до функціональних мов, які жорстко контролюють стан, що змінюється. Є два основні способи, якими функціональні мови керують паралельністю. Перший - за допомогою передачі повідомлень. Найкраще це показує Ерланг. У Ерланг взагалі немає загального стану між процесами. Вони спілкуються не діленням пам’яті, а моїми переданими повідомленнями. Це має мати сенс для вас, як ми це робимо зараз. Я передаю вам цю інформацію, надсилаючи вам повідомлення, а не ви запам'ятовуєте його з мого мозку! Перейшовши на повідомлення, що передає більшість помилок блокування, просто відійдіть. Крім того, повідомлення можуть передаватися по мережі, а також в межах одного вузла.
Інший метод - STM, який розшифровується як пам'ять транскрипції програмного забезпечення, це присутні в clojure та Haskell (та інших). У STM пам'ять поділяється, але зміни можуть бути здійснені лише через транзакцію. Оскільки в Базі даних люди зрозуміли, що все це вийшло в 1970-х, досить легко переконатися, що ми все зрозуміємо.
Насправді я трохи спростив, Clojure і Haskell можуть обидва робити передачу повідомлень, а Erlang може робити STM.
Відмова Я є автором програми веб-служб програмування з Erlang , яка буде випущена в ранньому випуску протягом найближчих кількох тижнів.