Concurrency and Coordination Runtime (CCR) este o bibliotecă pentru lucrul cu fluxuri de date paralele și asincrone bazate pe .NET Framework de la Microsoft , împreună cu Microsoft Robotics Developer Studio (MS RDS). În ciuda faptului că această bibliotecă vine cu MS RDS, domeniul ei nu se limitează la modelarea comportamentului roboticii, ci poate fi folosită și pentru a îmbunătăți asincronia în orice aplicație.
Logica software a unui robot – spre deosebire de aplicațiile tradiționale – trebuie să interacționeze cu un mediu imprevizibil și să răspundă corect la informațiile care provin simultan de la mulți senzori. Din multe motive, are sens să transferăm o parte semnificativă a logicii la un set de computere care interacționează între ele, care pot fi localizate fizic atât pe robot, cât și în afara acestuia. Acest lucru necesită o abordare care este la fel de potrivită atât pentru aplicații paralele, cât și pentru aplicații distribuite. Biblioteca Concurrency & Coordination Runtime a fost special concepută pentru a facilita scrierea codului pentru execuție paralelă și scalare bună pe procesoarele moderne multi-core.
Pentru a răspunde la întrebarea „de ce avem nevoie de CCR”, să ne amintim definiția conceptului de „aplicație” în contextul Robotics Studio: este o compoziție de componente slab cuplate care rulează în paralel. Această abordare ar putea fi implementată folosind primitivele de programare multi-threaded existente. Cu toate acestea, procesul de scriere a aplicațiilor multithreaded este departe de a fi o sarcină ușoară și devine din ce în ce mai dificil pe măsură ce crește numărul de fire care se execută concomitent.
Când utilizați CCR, nu trebuie să gestionați manual firele, blocările, semaforele, adică toate primitivele standard de sincronizare a firelor. CCR nu este doar un set de utilitare, este o abordare complet diferită a scrierii codului. Se bazează pe cozi de mesaje și pe un set de primitive de sincronizare dependente de date. Thread-urile sunt complet ascunse de programator, iar Runtime , în funcție de date și de unde este nevoie, decide ce cod va fi executat și unde. Deoarece sincronizarea se bazează pe date, este interzisă utilizarea memoriei partajate, deoarece aceasta poate perturba complet schema de funcționare a codului.
Biblioteca CCR facilitează scrierea de programe care funcționează cu multe fluxuri de date paralele și asincrone. Informațiile de la senzori, procesarea acesteia și controlul mișcării în roboți pot servi ca exemple de fluxuri de date [1] .
Biblioteca CCR conține o clasă Dispatchercare implementează o suită de threading cu un număr fix de fire de execuție , toate putând rula simultan. Fiecare dispecer conține o coadă (numită DispatcherQueue) de delegați care reprezintă punctul de intrare într-o procedură (numită și element de lucru sau operație) care poate fi executată asincron. Operațiile sunt transmise firelor de execuție pentru execuție. Obiectul dispecer conține și un generic Port , care este o coadă în care este plasat rezultatul execuției asincrone a operației. Fiecare operație poate fi asociată cu un obiect ReceiverTaskcare folosește rezultatul pentru prelucrare ulterioară. Arbitergestionează sarcinile primite ReceiverTaskși le apelează atunci când rezultatul pe care îl așteaptă este gata și pus în coadă Port.
În octombrie 2008, biblioteca CCR a devenit disponibilă ca produs separat împreună cu un instrument de servicii software descentralizate numit CCR și DSS Toolkit 2008 [2] .
.NET | |
---|---|
Implementări | |
Arhitectură | |
Infrastructură | |
Limbi Microsoft | |
Alte limbi | |
Fundamente Windows | |
Componente | |
Comparații |
|
Tehnologii viitoare | |
Resurse informaționale |