Рівночасні обчислення: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
TohaomgBot (обговорення | внесок)
м Згруповано однакові примітки
Скасування редагування № 31287772 користувача TohaomgBot (обговорення)
Рядок 1: Рядок 1:
{{парадигми програмування}}
{{парадигми програмування}}
{{не плутати|Паралельні обчислення|паралельними обчисленнями}}

'''Рівночасні<ref>Англійсько-українсько-англійський словник наукової мови (Фізика та споріднені науки) у двох частинах</ref> обчислення''', '''Конкурентні обчислення''' ({{lang-en|Concurrent computing}})&nbsp;— це форма [[обчислення|обчислень]], в якій кілька обчислень відбуваються в часових відрізках, що перетинаються, а не є послідовними (так, що кожне обчислення мусить закінчитись перед тим, як почнеться інше).
'''Рівночасні<ref>Англійсько-українсько-англійський словник наукової мови (Фізика та споріднені науки) у двох частинах</ref> обчислення''', '''Конкурентні обчислення''' ({{lang-en|Concurrent computing}})&nbsp;— це форма [[обчислення|обчислень]], в якій кілька обчислень виконуються поперемінно, на часових відрізках, що перетинаються кожен момент виконується лише одне з таких обчислень, але чергове обчислення може починатися до того, як буде завершено інші).
<!-- This is a property of a system—this may be an individual [[computer program|program]], a [[computer]], or a [[computer network|network]]—and there is a separate execution point or «thread of control» for each computation («process»). A ''concurrent system'' is one where a computation can advance without waiting for all other computations to complete.<ref>''Operating System Concepts'' 9th edition, Abraham Silberschatz. «Chapter 4: Threads»</ref>
<!-- This is a property of a system—this may be an individual [[computer program|program]], a [[computer]], or a [[computer network|network]]—and there is a separate execution point or «thread of control» for each computation («process»). A ''concurrent system'' is one where a computation can advance without waiting for all other computations to complete.<ref>''Operating System Concepts'' 9th edition, Abraham Silberschatz. «Chapter 4: Threads»</ref>


Рядок 17: Рядок 17:
У рівночасних обчисленнях декілька обчислень існують одночасно (як процеси або потоки виконання), але в кожну мить фізичного часу відбувається лише одне обчислення{{efn|Це не враховує паралелізм що може реалізовуватись ядром процесора, такий як [[конвеєр команд]] чи [[Векторний процесор|векторні інструкції]]. Одноядерний, однопроцесорний ''комп'ютер'' може мати здатність до деякого паралелізму, наприклад при використанні [[Співпроцесор|співпроцесора]] але сам процесор такої здатності не має.}}. Паралельні обчислення неможливі на одному одноядерному процесорі, оскільки в таких системах у кожен момент часу може відбуватися лише одне обчислення. Як наслідок, аспекти синхронізації паралельних обчислень визначаються особливостями апаратної платформи, а конкурентних&nbsp;— програмної.
У рівночасних обчисленнях декілька обчислень існують одночасно (як процеси або потоки виконання), але в кожну мить фізичного часу відбувається лише одне обчислення{{efn|Це не враховує паралелізм що може реалізовуватись ядром процесора, такий як [[конвеєр команд]] чи [[Векторний процесор|векторні інструкції]]. Одноядерний, однопроцесорний ''комп'ютер'' може мати здатність до деякого паралелізму, наприклад при використанні [[Співпроцесор|співпроцесора]] але сам процесор такої здатності не має.}}. Паралельні обчислення неможливі на одному одноядерному процесорі, оскільки в таких системах у кожен момент часу може відбуватися лише одне обчислення. Як наслідок, аспекти синхронізації паралельних обчислень визначаються особливостями апаратної платформи, а конкурентних&nbsp;— програмної.


<!--{{efn|This is discounting parallelism internal to a processor core, such as pipelining or vectorized instructions. A one-core, one-processor ''machine'' may be capable of some parallelism, such as with a [[coprocessor]], but the processor alone is not.}} By contrast, concurrent computing consists of process ''lifetimes'' overlapping, but execution need not happen at the same instant. The goal here is to model processes in the outside world that happen concurrently, such as multiple clients accessing a server at the same time. Structuring software systems as composed of multiple concurrent, communicating parts can be useful for tackling complexity, regardless of whether the parts can be executed in parallel.<ref name=":0">{{cite book |first=Fred B. |last=Schneider |title=On Concurrent Programming |publisher=Springer |isbn=9780387949420}}</ref>{{rp|1}}
<!--{{efn|This is discounting parallelism internal to a processor core, such as pipelining or vectorized instructions. A one-core, one-processor ''machine'' may be capable of some parallelism, such as with a [[coprocessor]], but the processor alone is not.}} By contrast, concurrent computing consists of process ''lifetimes'' overlapping, but execution need not happen at the same instant. The goal here is to model processes in the outside world that happen concurrently, such as multiple clients accessing a server at the same time. Structuring software systems as composed of multiple concurrent, communicating parts can be useful for tackling complexity, regardless of whether the parts can be executed in parallel.<ref>{{cite book |first=Fred B. |last=Schneider |title=On Concurrent Programming |publisher=Springer |isbn=9780387949420}}</ref>{{rp|1}}


For example, concurrent processes can be executed on one core by interleaving the execution steps of each process via [[time-sharing]] slices: only one process runs at a time, and if it does not complete during its time slice, it is ''paused'', another process begins or resumes, and then later the original process is resumed. In this way, multiple processes are part-way through execution at a single instant, but only one process is being executed at that instant.{{citation needed|date=December 2016}}
For example, concurrent processes can be executed on one core by interleaving the execution steps of each process via [[time-sharing]] slices: only one process runs at a time, and if it does not complete during its time slice, it is ''paused'', another process begins or resumes, and then later the original process is resumed. In this way, multiple processes are part-way through execution at a single instant, but only one process is being executed at that instant.{{citation needed|date=December 2016}}
Рядок 37: Рядок 37:


== Типові задачі ==
== Типові задачі ==
Метою застосування конкурентних обчислень є моделювання процесів реального світу, які відбуваються конкурентно, наприклад таких, як одночасний доступ кількох клієнтів до сервера. Побудова програмних систем, що складаються з багатьох комунікуючих частин, що працюють конкурентно, може бути корисною для зменшення складності таких систем незалежно від того, чи можуть виконуватись їх частини паралельно<ref name=":0"/>{{rp|1}}.
Метою застосування конкурентних обчислень є моделювання процесів реального світу, які відбуваються конкурентно, наприклад таких, як одночасний доступ кількох клієнтів до сервера. Побудова програмних систем, що складаються з багатьох комунікуючих частин, що працюють конкурентно, може бути корисною для зменшення складності таких систем незалежно від того, чи можуть виконуватись їх частини паралельно<ref name=":0">{{cite book |first=Fred B. |last=Schneider |title=On Concurrent Programming |publisher=Springer |isbn=9780387949420}}</ref>{{rp|1}}.


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

Версія за 09:57, 25 жовтня 2021

Рівночасні[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.