Рівночасні обчислення

Рівночасні[1] обчислення, або конкурентні обчислення (англ. Concurrent computing) — це форма обчислень, у якій кілька обчислень виконуються поперемінно, на часових відрізках, що перетинаються (у кожну мить виконується лише одне з таких обчислень, але чергове обчислення може починатися до того, як буде завершено інші).

Означення

Поняття «рівночасних обчислень» часто плутають з подібним, але дещо відмінним поняттям «рівнобіжних обчислень»[2][3], хоча обидва описуються як «рівнобіжні процеси, що виконуються протягом спільних часових відрізків». У рівнобіжних обчисленнях декілька обчислень існують і відбуваються одночасно в кожну мить фізичного часу (такт процесора), наприклад на різних процесорах багатопроцесорної машини. Їхньою метою є зменшення часу виконання обчислень.

У рівночасних обчисленнях декілька обчислень існують одночасно (як процеси або нитки), але в кожну мить фізичного часу відбувається лише одне обчислення[a]. Рівнобіжні обчислення неможливі на одному одноядерному процесорі, оскільки в таких системах у кожну мить часу може відбуватися лише одне обчислення. Як наслідок, аспекти синхронізації рівнобіжних обчислень визначаються особливостями апаратної платформи, а рівночасних — програмної.


Механізми синхронізації

Поширеними, але не єдиними механізмами синхронізації рівночасних обчислень є сигнали, семафори та черги повідомлень.

Типові задачі

Метою застосування рівночасних обчислень є моделювання процесів справжнього світу, які відбуваються рівночасно, наприклад таких, як одночасний доступ кількох клієнтів до сервера. Побудова програмних систем, що складаються з багатьох комунікуючих частин, що працюють рівночасно, може бути корисною для зменшення складности таких систем незалежно від того, чи можуть виконуватися їхні частини рівнобіжно[4]:1.

Типовою задачею рівночасних обчислень є реалізація механізмів планування процесів у багатозадачних системах.

Інструменти

Інструменти, які дають змогу здійснювати рівночасні обчислення, можуть входити до складу окремих мов програмування (з властивостями рівнобіжности), або надаватися через бібліотеки, або бути реалізовані на системному рівні.

Мови, що підтримують рівночасні обчислення

Бібліотеки, що підтримують рівночасні обчислення

Виноски

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

Примітки

  1. Англійсько-українсько-англійський словник наукової мови (Фізика та споріднені науки) у двох частинах
  2. Pike, Rob (2012-01-11). «Concurrency is not Parallelism». Waza conference, 11 January 2012. Retrieved from http://talks.golang.org/2012/waza.slide (slides) and http://vimeo.com/49718712 (video).
  3. Parallelism vs. Concurrency. Haskell Wiki.
  4. Schneider, Fred B. (1997). On Concurrent Programming. Springer. ISBN 9780387949420.