Concurrency and Coordination Runtime (CCR) är ett bibliotek för att arbeta med parallella och asynkrona dataströmmar baserat på .NET Framework från Microsoft , tillsammans med Microsoft Robotics Developer Studio (MS RDS). Trots det faktum att detta bibliotek kommer med MS RDS, är dess omfattning inte begränsad till att modellera robotteknikens beteende, utan kan också användas för att förbättra asynkroni i alla applikationer.
En robots mjukvarulogik måste - till skillnad från traditionella applikationer - interagera med en oförutsägbar miljö och korrekt svara på information som kommer samtidigt från många sensorer. Av många anledningar är det vettigt att överföra en betydande del av logiken till en uppsättning datorer som interagerar med varandra, som fysiskt kan placeras både på roboten och utanför den. Detta kräver ett tillvägagångssätt som är lika väl lämpat för både parallella och distribuerade applikationer. Concurrency & Coordination Runtime-biblioteket var speciellt utformat för att göra det lättare att skriva kod för parallell exekvering och bra skalning på moderna flerkärniga processorer.
För att svara på frågan "varför behöver vi CCR", låt oss påminna om definitionen av begreppet "applikation" i sammanhanget av Robotics Studio: det är en sammansättning av löst kopplade komponenter som körs parallellt. Detta tillvägagångssätt skulle kunna implementeras med hjälp av befintliga flertrådiga programmeringsprimitiver. Processen att skriva flertrådade applikationer är dock långt ifrån en enkel uppgift, och det blir allt svårare när antalet samtidigt exekverande trådar växer.
När du använder CCR behöver du inte manuellt hantera trådar, lås, semaforer, det vill säga alla vanliga trådsynkroniseringsprimitiver. CCR är inte bara en uppsättning verktyg, det är ett helt annat sätt att skriva kod. Den är baserad på meddelandeköer och en uppsättning databeroende synkroniseringsprimitiver. Trådar är helt dolda för programmeraren, och Runtime , beroende på data och var den behövs, avgör vilken kod som ska köras och var. Eftersom synkroniseringen är baserad på data är det förbjudet att använda delat minne, eftersom detta helt kan störa kodoperationsschemat.
CCR-biblioteket gör det enkelt att skriva program som fungerar med många parallella och asynkrona dataströmmar. Information från sensorer, dess bearbetning och rörelsestyrning i robotar kan fungera som exempel på dataflöden [1] .
CCR-biblioteket innehåller en klass Dispatchersom implementerar en trådningssvit med ett fast antal trådar , som alla kan köras samtidigt. Varje avsändare innehåller en kö (kallad DispatcherQueue) av delegater som representerar ingångspunkten till en procedur (även kallad ett arbetsobjekt eller operation) som kan exekveras asynkront. Operationer skickas till trådar för exekvering. Dispatcher-objektet innehåller också en generisk Port , som är en kö i vilken resultatet av den asynkrona exekveringen av operationen placeras. Varje operation kan associeras med ett objekt ReceiverTasksom använder resultatet för vidare bearbetning. Arbiterhanterar mottagna uppgifter ReceiverTaskoch ringer upp dem när resultatet de väntar på är klart och köat Port.
I oktober 2008 blev CCR-biblioteket tillgängligt som en separat produkt tillsammans med ett verktyg för decentraliserade mjukvarutjänster som heter CCR och DSS Toolkit 2008 [2] .
.NETTO | |
---|---|
Genomföranden | |
Arkitektur | |
Infrastruktur | |
Microsofts språk | |
Andra språk | |
Windows Foundations | |
Komponenter | |
Jämförelser |
|
Framtida teknologier | |
Informationsresurser |