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

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Конкурентні обчислення)
Перейти до навігації Перейти до пошуку

Рівночасні[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. On Concurrent Programming. Springer. ISBN 9780387949420.