Конкурентно програмиране: Разлика между версии

Изтрито е съдържание Добавено е съдържание
Нова страница, частичен превод от английски и португалски вариант с добавени източници и препратки.
 
Редакция без резюме
Ред 43:
Тъй като конкурентните системи разчитат на споделени ресурси, конкурентното програмиране изисква употребата на някаква форма на арбитър, който да координира достъпа до тези ресурси.
 
== Модели на конкурентност ==
Има няколко модела на конкурентно програмиране.
*Модел – [[Участник]]
**модел за сигурност – [[Обектна способност]]
* [[Мрежа на Петри]]
* [[Process calculus|Изчислителни процеси]] като:
**[[Околно смятане]]
**[[Смятане на комуникиращи системи]]
**[[Комуникиращи последователни процеси]]
**[[π – смятане]]
**[[Присъединяващо смятане]]
* [[Входно/ Изходна автоматизация]]
 
== Изпълнение ==
Има различни методи за осъществяване на Конкурентно програмиране , като например изпълнение на всяко изчислително изпълнение като [[Процес (информатика)|процес]] на операционната система, или осъществяване на изчислителен процес като набор от [[нишки]] в рамките на един процес на операционната система.
 
'''Конкурентно взаимодействие и комуникация'''
*'''[[Споделена памет]]:''' конкурентните компоненти си комуникират, чрез промени по съдържанието на обща памет (примерно [[Java]] и [[C Sharp|C#]]). Този вид конкурентно програмиране обикновено изисква някаква форма на заключване (например [[mutexes]], [[semaphores]] или [[monitors]]) за да може да се координират отделните нишки. Програма която изпълнява всички от тях се нарича thread-safe.
*'''[[Предаване на съобщения]]:''' компонентите си общуват чрез размяна на съобщения (примерно [[Scala]], [[Erlang]] and [[occam]]). Обменът на съобщения може да се извършва асинхронно или синхронно „рандеву” стил, в който изпращача се блокира докато не изпрати съобщението.Пращането на асинхронните съобщения може да е ненадеждно (наричат се ”Прати и се моли”).Предаването на съобщения тенденциозно е по-лесно от Споделената памет и се смята за по стабилна форма на конкурентно програмиране. Предаването на съобщения може ефективно да се осъществи върху [[симетрични микропроцесори]], със или без споделена памет.
 
== История ==
Конкурентното изчисляване е разработено по време на ранното железопътно строителство и [[телеграфия]], от 19 и началото на 20 век, както и някои термини датират към този период, като семафори. Възникването му е било породено от въпроса, как да се движат множество влакове по една и съща железопътна система (избягвайки сблъсъци и повишаване на ефективността) и как да се обработват множество предавания за определен набор от проводници (подобряване на ефективността). Академично проучване за паралелните алгоритми през 1960г. се кредитира с първата книга в тази област.
 
== Разпространение ==
Конкурентността е силно застъпена във изчислителната техника, среща се от хардуер на единични чипове до световни мрежи.
 
Примери.
 
На ниво програмен език:
*[[Channel]]
*[[Coroutine]]
*[[Futures and promises]]
На ниво операционна система:
*[[Computer multitasking]], включва и двата ([[кооперативен]] и [[изпреварващ]] multitasking)
**[[Time – sharing]] което заменя последователната пакетна обработка на задачите с конкурентна такава.
*[[Процес (информатика)|Процес]]
*[[Нишка]]
На ниво мрежа, мрежовите системи обикновено са конкурентни по своя характер, тъй като те се състоят от отделни устройства.
 
== Езици поддържащи конкурентно програмиране ==
Тези [[Език за програмиране|езици]] често се определят като Конкурентно Ориентирани или Конкурентно Ориентирани Програмни Езици (КОПЕ.)
Днес, най-често използваните езици за програмиране, които имат специфични конструкции за конкурентност са [[Java]] и [[C Sharp|C #]]. И двата езика фундаментално използват конкурентният модел Споделена памет със заключване чрез monitors.
От езиците ползващи модела Предаване на съобщения може би най-популярен към момента е [[Erlang]].
Много конкурентните езици за програмиране са разработени по-скоро като езици за научни изследвания (например [[Pict]]), отколкото като езици за производствена употреба. Въпреки това, езици като [[Erlang]], [[Limbo]] и [[occam]] се използват за промишлена употреба в различни периоди през последните 20 години.
Езици, в които конкурентността играе важна роля, са:
== Вижте също ==
* [[Паралелни изчисления]]