Wszelkie prawa zastrzeżone. Nieautoryzowane ...pdf.helion.pl/proch5/proch5.pdf · samej metodzie,...

32

Transcript of Wszelkie prawa zastrzeżone. Nieautoryzowane ...pdf.helion.pl/proch5/proch5.pdf · samej metodzie,...

Wszelkie prawa zastrzeżone Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione Wykonywanie kopii metodą kserograficzną fotograficzną a także kopiowanie książki na nośniku filmowym magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań by zawarte w tej książce informacje były kompletne i rzetelne Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich Autor oraz Wydawnictwo HELION nie ponoszą roacutewnież żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce

Redaktor prowadzący Ewelina BurskaProjekt okładki Studio GraviteOlsztyn Obarek Pokoński Pazdrijowski Zaprucki

Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock

Wydawnictwo HELIONul Kościuszki 1c 44-100 GLIWICEtel 32 231 22 19 32 230 98 63e-mail helionhelionplWWW httphelionpl (księgarnia internetowa katalog książek)

Drogi CzytelnikuJeżeli chcesz ocenić tę książkę zajrzyj pod adres httphelionpluseropinieproch5Możesz tam wpisać swoje uwagi spostrzeżenia recenzję

ISBN 978-83-246-6698-0

Copyright copy Helion 2014

Printed in Poland

bull Kup książkębull Poleć książkę bull Oceń książkę

bull Księgarnia internetowabull Lubię to raquo Nasza społeczność

Spis tre ci

Wst p 9

Przedmowa 11

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 13Programowanie asynchroniczne Operator await i modyfikator async (nowo

j zyka C 50 i platformy NET 45) 13Klasa Parallel z biblioteki TPL (nowo platformy NET 40) 19

Roacutewnoleg a p tla For 20Przerywanie p tli 22

Rozdzia 2 W tki 25Monte Carlo 25Obliczenia bez u ycia dodatkowych w tkoacutew 26Przeniesienie oblicze do osobnego w tku 28W tki procesy i domeny aplikacji 30Usypianie bie cego w tku 31Przerywanie dzia ania w tku (Abort) 32Wstrzymywanie i wznawiane dzia ania w tku 34W tki dzia aj ce w tle 35Zmiana priorytetu w tku 36U ycie wielu w tkoacutew i problemy z generatorem liczb pseudolosowych 36Pami lokalna w tku i bezpiecze stwo w tku 39Czekanie na uko czenie pracy w tku (Join) 40Sekcje krytyczne (lock) 43Przesy anie danych do w tku 45Pula w tkoacutew 47Jeszcze raz o sygnalizacji zako czenia pracy w tkoacutew 50Operacje atomowe 51Tworzenie w tkoacutew za pomoc SystemThreading

Timer i imitacja timera w w tku z wysokim priorytetem 54Zadania 57

Rozdzia 3 Zmienne w aplikacjach wielow tkowych 59Atrybut ThreadStatic 59Opoacute niona inicjacja i zmienne lokalne w tku 60Volatile 64Zadania 65

Kup książkę Poleć książkę

4 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 4 Wi cej o synchronizacji w tkoacutew Blokady i sygna y 67Problem ucztuj cych filozofoacutew 68Problem czytelnikoacutew i pisarzy 73Komunikacja mi dzy w tkami Problem producenta i konsumenta 78Sygnalizacja za pomoc metod MonitorPulse i MonitorWait 81EventWaitHandle i AutoResetEvent 85Bariera 86Synchronizacja w tkoacutew z roacute nych procesoacutew Muteksy i semafory nazwane 88

Kontrola ilo ci instancji aplikacji 89Mutex 89Semafor 91

Zadania 93

Rozdzia 5 W tki a interfejs u ytkownika 95W tki robocze w aplikacjach desktopowych 95

Przygotowanie projektu aplikacji oraz danych wej ciowych 96Wykorzystanie w tkoacutew w d ugotrwa ych metodach zdarzeniowych 99

Synchronizacja w tkoacutew z interfejsem u ytkownika w aplikacjach Windows Forms 104BackgroundWorker 110Synchronizacja w tkoacutew z komponentami Windows Presentation Foundation 114

Projekt graficznego interfejsu u ytkownika 115Implementacja metod zdarzeniowych 117Bezpieczny dost p do kontrolek WPF 125

Kontekst synchronizacji 128Gro ba zag odzenia w tku interfejsu i asynchroniczna zmiana stanu

wspoacute dzielonych zasoboacutew 135Zadania 136

Rozdzia 6 Zadania 137Tworzenie zadania 137Praca z zadaniami 138Dane przekazywane do zada 140Dane zwracane przez zadania 141Przyk ad test liczby pierwszej 141Synchronizacja zada 143Przyk ad sztafeta zada 144Przerywanie zada 145Stan zadania 149Fabryka zada 152Planista i zarz dzanie kolejkowaniem zada 155Ustawienia zada 159Zadania 160

Rozdzia 7 Klasa Parallel Zroacutewnoleglanie p tli 161Roacutewnoleg a p tla for 162Roacutewnoleg a p tla foreach 163Metoda Invoke 164Ustawienia p tli roacutewnoleg ych Klasa ParallelOptions 166Przerywanie p tli za pomoc CancelationToken 166Kontrola wykonywania p tli 168Synchronizacja p tli roacutewnoleg ych Obliczanie metod Monte Carlo 169Partycjonowanie danych 175Zadania 177

Kup książkę Poleć książkę

Spis tre ci 5

Rozdzia 8 Synchronizacja zada 179Blokady (lock) 179Sygna y (MonitorPulse i MonitorWait) 182Bariera 184

Rozdzia 9 Dane w programach roacutewnoleg ych 187Praca ze zbiorami danych w programowaniu roacutewnoleg ym 187

Wspoacute bie ne struktury danych 187Kolekcja ConcurrentBag 189Wspoacute bie ne kolejka i stos 189Praca z BlockingCollection 190W asna kolekcja wspoacute bie na 193Agregacja 197Agregacje dla kolekcji roacutewnoleg ych 199

PLINQ mdash zroacutewnoleglone zapytania LINQ 203Przyk ad zapytania PLINQ 204Jak dzia a PLINQ 205Kiedy PLINQ jest wydajne 207Metody przekszta caj ce dane wynikowe 208Przerywanie zapyta 209Metoda ForAll 212

Zadania 213

Rozdzia 10 Synchronizacja kontrolek interfejsu z zadaniami 215Zadania w aplikacjach Windows Forms 215Zadania w aplikacjach WPF 219Aktualizacja interfejsu z wykorzystaniem operatora await 221Zadania 223

Rozdzia 11 Analiza aplikacji wielow tkowych Debugowanie i profilowanie 225Okno w tkoacutew (Threads) 226Okno zada roacutewnoleg ych (Parallel Tasks) 228Okno stosoacutew roacutewnoleg ych (Parallel Stacks) 229Okno roacutewnoleg ego ledzenia zmiennych (Parallel Watch) 230Concurrency Visualizer 232

Widok Wykorzystanie CPU 232Widok W tki 233Widok Rdzenie 236Profilowanie aplikacji zewn trznych 237Znaczniki 238

Zadania 241

Rozdzia 12 Wst p do CCR i DSS 243Instalacja rodowiska Microsoft Robotics 245

Mo liwe problemy z uruchomieniem rodowiska Robotics 247Kompilacja i uruchamianie projektoacutew do czonych do ksi ki 248

CCR i DSS w pigu ce 249Czujniki i urz dzenia mdash tworzenie pierwszej us ugi 249Serwisy partnerskie 265

Rozdzia 13 Skalowalne rozwi zanie dla systemoacutew rozproszonychna bazie technologii CCR i DSS 277

Opoacute nione uruchamianie 291Uruchamianie oblicze na klastrze 293Podsumowanie 298Zadania 299

Kup książkę Poleć książkę

6 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 14 Wprowadzenie do Reactive ExtensionsZarz dzanie sekwencjami zdarze 301

Programowanie reaktywne 302IObservableltTgt 303IObserverltTgt 303Dualizm interaktywno-reaktywny 304Obserwator mdash wzorzec projektowy 305

Platforma Rx 306Biblioteki Rx 307

Gramatyka Rx 309Jak korzysta z interfejsoacutew w Rx 309Subskrypcje 312LINQ do zdarze 315

Zimne i gor ce obserwable 329

Rozdzia 15 Wspoacute bie no w Rx 333Zarz dzanie roacutewnoleg o ci 333

Interfejs IScheduler 334Plani ci 335Metody SubscribeOn i ObserveOn 339S owo o unifikacji 343

Rozdzia 16 Przyk ady u ycia technologii Rx w aplikacjach WPF 345Rysowanie z u yciem Rx 346Wyszukiwarka 353

Rozdzia 17 CUDA w NET 365Konfiguracja rodowiska dla CUDAfyNET 366Pierwsze kroki 368Hello World czyli pierwszy program CUDAfyNET 370Emulator GPU 375W asno ci GPU 376Przekazywanie parametroacutew do kerneli 378Operacje na pami ci globalnej karty graficznej 380Pomiar czasu wykonania 383Dost p zwarty do pami ci globalnej i pami wspoacute dzielona 386Generator liczb pseudolosowych 390FFT na GPU 392BLAS 394Zadania 395

Dodatek A Biblioteka TPL w WinRT 397Zadania 398Struktura SpinWait 400Usypianie w tkoacutew 400Pula w tkoacutew 401ThreadPoolTimer 402Podobie stwa 403Przeno na biblioteka 404Zadania 406

Kup książkę Poleć książkę

Spis tre ci 7

Dodatek B Dobre praktyki programowania aplikacji wielow tkowych 407Wprowadzenie 407Sekcje krytyczne i zakleszczenia 407Wy cig 411S owo kluczowe volatile i kontrola p tli wykonywanej w ramach funkcji w tku 417Bezpiecze stwo w tkoacutew a konstruktory i pola statyczne 419

Dodatek C Menad er pakietoacutew NuGet 423Instalacja NuGet 423Korzystanie z NuGet 425

Skorowidz 427

Kup książkę Poleć książkę

8 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Spis tre ci

Wst p 9

Przedmowa 11

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 13Programowanie asynchroniczne Operator await i modyfikator async (nowo

j zyka C 50 i platformy NET 45) 13Klasa Parallel z biblioteki TPL (nowo platformy NET 40) 19

Roacutewnoleg a p tla For 20Przerywanie p tli 22

Rozdzia 2 W tki 25Monte Carlo 25Obliczenia bez u ycia dodatkowych w tkoacutew 26Przeniesienie oblicze do osobnego w tku 28W tki procesy i domeny aplikacji 30Usypianie bie cego w tku 31Przerywanie dzia ania w tku (Abort) 32Wstrzymywanie i wznawiane dzia ania w tku 34W tki dzia aj ce w tle 35Zmiana priorytetu w tku 36U ycie wielu w tkoacutew i problemy z generatorem liczb pseudolosowych 36Pami lokalna w tku i bezpiecze stwo w tku 39Czekanie na uko czenie pracy w tku (Join) 40Sekcje krytyczne (lock) 43Przesy anie danych do w tku 45Pula w tkoacutew 47Jeszcze raz o sygnalizacji zako czenia pracy w tkoacutew 50Operacje atomowe 51Tworzenie w tkoacutew za pomoc SystemThreading

Timer i imitacja timera w w tku z wysokim priorytetem 54Zadania 57

Rozdzia 3 Zmienne w aplikacjach wielow tkowych 59Atrybut ThreadStatic 59Opoacute niona inicjacja i zmienne lokalne w tku 60Volatile 64Zadania 65

Kup książkę Poleć książkę

4 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 4 Wi cej o synchronizacji w tkoacutew Blokady i sygna y 67Problem ucztuj cych filozofoacutew 68Problem czytelnikoacutew i pisarzy 73Komunikacja mi dzy w tkami Problem producenta i konsumenta 78Sygnalizacja za pomoc metod MonitorPulse i MonitorWait 81EventWaitHandle i AutoResetEvent 85Bariera 86Synchronizacja w tkoacutew z roacute nych procesoacutew Muteksy i semafory nazwane 88

Kontrola ilo ci instancji aplikacji 89Mutex 89Semafor 91

Zadania 93

Rozdzia 5 W tki a interfejs u ytkownika 95W tki robocze w aplikacjach desktopowych 95

Przygotowanie projektu aplikacji oraz danych wej ciowych 96Wykorzystanie w tkoacutew w d ugotrwa ych metodach zdarzeniowych 99

Synchronizacja w tkoacutew z interfejsem u ytkownika w aplikacjach Windows Forms 104BackgroundWorker 110Synchronizacja w tkoacutew z komponentami Windows Presentation Foundation 114

Projekt graficznego interfejsu u ytkownika 115Implementacja metod zdarzeniowych 117Bezpieczny dost p do kontrolek WPF 125

Kontekst synchronizacji 128Gro ba zag odzenia w tku interfejsu i asynchroniczna zmiana stanu

wspoacute dzielonych zasoboacutew 135Zadania 136

Rozdzia 6 Zadania 137Tworzenie zadania 137Praca z zadaniami 138Dane przekazywane do zada 140Dane zwracane przez zadania 141Przyk ad test liczby pierwszej 141Synchronizacja zada 143Przyk ad sztafeta zada 144Przerywanie zada 145Stan zadania 149Fabryka zada 152Planista i zarz dzanie kolejkowaniem zada 155Ustawienia zada 159Zadania 160

Rozdzia 7 Klasa Parallel Zroacutewnoleglanie p tli 161Roacutewnoleg a p tla for 162Roacutewnoleg a p tla foreach 163Metoda Invoke 164Ustawienia p tli roacutewnoleg ych Klasa ParallelOptions 166Przerywanie p tli za pomoc CancelationToken 166Kontrola wykonywania p tli 168Synchronizacja p tli roacutewnoleg ych Obliczanie metod Monte Carlo 169Partycjonowanie danych 175Zadania 177

Kup książkę Poleć książkę

Spis tre ci 5

Rozdzia 8 Synchronizacja zada 179Blokady (lock) 179Sygna y (MonitorPulse i MonitorWait) 182Bariera 184

Rozdzia 9 Dane w programach roacutewnoleg ych 187Praca ze zbiorami danych w programowaniu roacutewnoleg ym 187

Wspoacute bie ne struktury danych 187Kolekcja ConcurrentBag 189Wspoacute bie ne kolejka i stos 189Praca z BlockingCollection 190W asna kolekcja wspoacute bie na 193Agregacja 197Agregacje dla kolekcji roacutewnoleg ych 199

PLINQ mdash zroacutewnoleglone zapytania LINQ 203Przyk ad zapytania PLINQ 204Jak dzia a PLINQ 205Kiedy PLINQ jest wydajne 207Metody przekszta caj ce dane wynikowe 208Przerywanie zapyta 209Metoda ForAll 212

Zadania 213

Rozdzia 10 Synchronizacja kontrolek interfejsu z zadaniami 215Zadania w aplikacjach Windows Forms 215Zadania w aplikacjach WPF 219Aktualizacja interfejsu z wykorzystaniem operatora await 221Zadania 223

Rozdzia 11 Analiza aplikacji wielow tkowych Debugowanie i profilowanie 225Okno w tkoacutew (Threads) 226Okno zada roacutewnoleg ych (Parallel Tasks) 228Okno stosoacutew roacutewnoleg ych (Parallel Stacks) 229Okno roacutewnoleg ego ledzenia zmiennych (Parallel Watch) 230Concurrency Visualizer 232

Widok Wykorzystanie CPU 232Widok W tki 233Widok Rdzenie 236Profilowanie aplikacji zewn trznych 237Znaczniki 238

Zadania 241

Rozdzia 12 Wst p do CCR i DSS 243Instalacja rodowiska Microsoft Robotics 245

Mo liwe problemy z uruchomieniem rodowiska Robotics 247Kompilacja i uruchamianie projektoacutew do czonych do ksi ki 248

CCR i DSS w pigu ce 249Czujniki i urz dzenia mdash tworzenie pierwszej us ugi 249Serwisy partnerskie 265

Rozdzia 13 Skalowalne rozwi zanie dla systemoacutew rozproszonychna bazie technologii CCR i DSS 277

Opoacute nione uruchamianie 291Uruchamianie oblicze na klastrze 293Podsumowanie 298Zadania 299

Kup książkę Poleć książkę

6 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 14 Wprowadzenie do Reactive ExtensionsZarz dzanie sekwencjami zdarze 301

Programowanie reaktywne 302IObservableltTgt 303IObserverltTgt 303Dualizm interaktywno-reaktywny 304Obserwator mdash wzorzec projektowy 305

Platforma Rx 306Biblioteki Rx 307

Gramatyka Rx 309Jak korzysta z interfejsoacutew w Rx 309Subskrypcje 312LINQ do zdarze 315

Zimne i gor ce obserwable 329

Rozdzia 15 Wspoacute bie no w Rx 333Zarz dzanie roacutewnoleg o ci 333

Interfejs IScheduler 334Plani ci 335Metody SubscribeOn i ObserveOn 339S owo o unifikacji 343

Rozdzia 16 Przyk ady u ycia technologii Rx w aplikacjach WPF 345Rysowanie z u yciem Rx 346Wyszukiwarka 353

Rozdzia 17 CUDA w NET 365Konfiguracja rodowiska dla CUDAfyNET 366Pierwsze kroki 368Hello World czyli pierwszy program CUDAfyNET 370Emulator GPU 375W asno ci GPU 376Przekazywanie parametroacutew do kerneli 378Operacje na pami ci globalnej karty graficznej 380Pomiar czasu wykonania 383Dost p zwarty do pami ci globalnej i pami wspoacute dzielona 386Generator liczb pseudolosowych 390FFT na GPU 392BLAS 394Zadania 395

Dodatek A Biblioteka TPL w WinRT 397Zadania 398Struktura SpinWait 400Usypianie w tkoacutew 400Pula w tkoacutew 401ThreadPoolTimer 402Podobie stwa 403Przeno na biblioteka 404Zadania 406

Kup książkę Poleć książkę

Spis tre ci 7

Dodatek B Dobre praktyki programowania aplikacji wielow tkowych 407Wprowadzenie 407Sekcje krytyczne i zakleszczenia 407Wy cig 411S owo kluczowe volatile i kontrola p tli wykonywanej w ramach funkcji w tku 417Bezpiecze stwo w tkoacutew a konstruktory i pola statyczne 419

Dodatek C Menad er pakietoacutew NuGet 423Instalacja NuGet 423Korzystanie z NuGet 425

Skorowidz 427

Kup książkę Poleć książkę

8 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

4 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 4 Wi cej o synchronizacji w tkoacutew Blokady i sygna y 67Problem ucztuj cych filozofoacutew 68Problem czytelnikoacutew i pisarzy 73Komunikacja mi dzy w tkami Problem producenta i konsumenta 78Sygnalizacja za pomoc metod MonitorPulse i MonitorWait 81EventWaitHandle i AutoResetEvent 85Bariera 86Synchronizacja w tkoacutew z roacute nych procesoacutew Muteksy i semafory nazwane 88

Kontrola ilo ci instancji aplikacji 89Mutex 89Semafor 91

Zadania 93

Rozdzia 5 W tki a interfejs u ytkownika 95W tki robocze w aplikacjach desktopowych 95

Przygotowanie projektu aplikacji oraz danych wej ciowych 96Wykorzystanie w tkoacutew w d ugotrwa ych metodach zdarzeniowych 99

Synchronizacja w tkoacutew z interfejsem u ytkownika w aplikacjach Windows Forms 104BackgroundWorker 110Synchronizacja w tkoacutew z komponentami Windows Presentation Foundation 114

Projekt graficznego interfejsu u ytkownika 115Implementacja metod zdarzeniowych 117Bezpieczny dost p do kontrolek WPF 125

Kontekst synchronizacji 128Gro ba zag odzenia w tku interfejsu i asynchroniczna zmiana stanu

wspoacute dzielonych zasoboacutew 135Zadania 136

Rozdzia 6 Zadania 137Tworzenie zadania 137Praca z zadaniami 138Dane przekazywane do zada 140Dane zwracane przez zadania 141Przyk ad test liczby pierwszej 141Synchronizacja zada 143Przyk ad sztafeta zada 144Przerywanie zada 145Stan zadania 149Fabryka zada 152Planista i zarz dzanie kolejkowaniem zada 155Ustawienia zada 159Zadania 160

Rozdzia 7 Klasa Parallel Zroacutewnoleglanie p tli 161Roacutewnoleg a p tla for 162Roacutewnoleg a p tla foreach 163Metoda Invoke 164Ustawienia p tli roacutewnoleg ych Klasa ParallelOptions 166Przerywanie p tli za pomoc CancelationToken 166Kontrola wykonywania p tli 168Synchronizacja p tli roacutewnoleg ych Obliczanie metod Monte Carlo 169Partycjonowanie danych 175Zadania 177

Kup książkę Poleć książkę

Spis tre ci 5

Rozdzia 8 Synchronizacja zada 179Blokady (lock) 179Sygna y (MonitorPulse i MonitorWait) 182Bariera 184

Rozdzia 9 Dane w programach roacutewnoleg ych 187Praca ze zbiorami danych w programowaniu roacutewnoleg ym 187

Wspoacute bie ne struktury danych 187Kolekcja ConcurrentBag 189Wspoacute bie ne kolejka i stos 189Praca z BlockingCollection 190W asna kolekcja wspoacute bie na 193Agregacja 197Agregacje dla kolekcji roacutewnoleg ych 199

PLINQ mdash zroacutewnoleglone zapytania LINQ 203Przyk ad zapytania PLINQ 204Jak dzia a PLINQ 205Kiedy PLINQ jest wydajne 207Metody przekszta caj ce dane wynikowe 208Przerywanie zapyta 209Metoda ForAll 212

Zadania 213

Rozdzia 10 Synchronizacja kontrolek interfejsu z zadaniami 215Zadania w aplikacjach Windows Forms 215Zadania w aplikacjach WPF 219Aktualizacja interfejsu z wykorzystaniem operatora await 221Zadania 223

Rozdzia 11 Analiza aplikacji wielow tkowych Debugowanie i profilowanie 225Okno w tkoacutew (Threads) 226Okno zada roacutewnoleg ych (Parallel Tasks) 228Okno stosoacutew roacutewnoleg ych (Parallel Stacks) 229Okno roacutewnoleg ego ledzenia zmiennych (Parallel Watch) 230Concurrency Visualizer 232

Widok Wykorzystanie CPU 232Widok W tki 233Widok Rdzenie 236Profilowanie aplikacji zewn trznych 237Znaczniki 238

Zadania 241

Rozdzia 12 Wst p do CCR i DSS 243Instalacja rodowiska Microsoft Robotics 245

Mo liwe problemy z uruchomieniem rodowiska Robotics 247Kompilacja i uruchamianie projektoacutew do czonych do ksi ki 248

CCR i DSS w pigu ce 249Czujniki i urz dzenia mdash tworzenie pierwszej us ugi 249Serwisy partnerskie 265

Rozdzia 13 Skalowalne rozwi zanie dla systemoacutew rozproszonychna bazie technologii CCR i DSS 277

Opoacute nione uruchamianie 291Uruchamianie oblicze na klastrze 293Podsumowanie 298Zadania 299

Kup książkę Poleć książkę

6 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 14 Wprowadzenie do Reactive ExtensionsZarz dzanie sekwencjami zdarze 301

Programowanie reaktywne 302IObservableltTgt 303IObserverltTgt 303Dualizm interaktywno-reaktywny 304Obserwator mdash wzorzec projektowy 305

Platforma Rx 306Biblioteki Rx 307

Gramatyka Rx 309Jak korzysta z interfejsoacutew w Rx 309Subskrypcje 312LINQ do zdarze 315

Zimne i gor ce obserwable 329

Rozdzia 15 Wspoacute bie no w Rx 333Zarz dzanie roacutewnoleg o ci 333

Interfejs IScheduler 334Plani ci 335Metody SubscribeOn i ObserveOn 339S owo o unifikacji 343

Rozdzia 16 Przyk ady u ycia technologii Rx w aplikacjach WPF 345Rysowanie z u yciem Rx 346Wyszukiwarka 353

Rozdzia 17 CUDA w NET 365Konfiguracja rodowiska dla CUDAfyNET 366Pierwsze kroki 368Hello World czyli pierwszy program CUDAfyNET 370Emulator GPU 375W asno ci GPU 376Przekazywanie parametroacutew do kerneli 378Operacje na pami ci globalnej karty graficznej 380Pomiar czasu wykonania 383Dost p zwarty do pami ci globalnej i pami wspoacute dzielona 386Generator liczb pseudolosowych 390FFT na GPU 392BLAS 394Zadania 395

Dodatek A Biblioteka TPL w WinRT 397Zadania 398Struktura SpinWait 400Usypianie w tkoacutew 400Pula w tkoacutew 401ThreadPoolTimer 402Podobie stwa 403Przeno na biblioteka 404Zadania 406

Kup książkę Poleć książkę

Spis tre ci 7

Dodatek B Dobre praktyki programowania aplikacji wielow tkowych 407Wprowadzenie 407Sekcje krytyczne i zakleszczenia 407Wy cig 411S owo kluczowe volatile i kontrola p tli wykonywanej w ramach funkcji w tku 417Bezpiecze stwo w tkoacutew a konstruktory i pola statyczne 419

Dodatek C Menad er pakietoacutew NuGet 423Instalacja NuGet 423Korzystanie z NuGet 425

Skorowidz 427

Kup książkę Poleć książkę

8 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Spis tre ci 5

Rozdzia 8 Synchronizacja zada 179Blokady (lock) 179Sygna y (MonitorPulse i MonitorWait) 182Bariera 184

Rozdzia 9 Dane w programach roacutewnoleg ych 187Praca ze zbiorami danych w programowaniu roacutewnoleg ym 187

Wspoacute bie ne struktury danych 187Kolekcja ConcurrentBag 189Wspoacute bie ne kolejka i stos 189Praca z BlockingCollection 190W asna kolekcja wspoacute bie na 193Agregacja 197Agregacje dla kolekcji roacutewnoleg ych 199

PLINQ mdash zroacutewnoleglone zapytania LINQ 203Przyk ad zapytania PLINQ 204Jak dzia a PLINQ 205Kiedy PLINQ jest wydajne 207Metody przekszta caj ce dane wynikowe 208Przerywanie zapyta 209Metoda ForAll 212

Zadania 213

Rozdzia 10 Synchronizacja kontrolek interfejsu z zadaniami 215Zadania w aplikacjach Windows Forms 215Zadania w aplikacjach WPF 219Aktualizacja interfejsu z wykorzystaniem operatora await 221Zadania 223

Rozdzia 11 Analiza aplikacji wielow tkowych Debugowanie i profilowanie 225Okno w tkoacutew (Threads) 226Okno zada roacutewnoleg ych (Parallel Tasks) 228Okno stosoacutew roacutewnoleg ych (Parallel Stacks) 229Okno roacutewnoleg ego ledzenia zmiennych (Parallel Watch) 230Concurrency Visualizer 232

Widok Wykorzystanie CPU 232Widok W tki 233Widok Rdzenie 236Profilowanie aplikacji zewn trznych 237Znaczniki 238

Zadania 241

Rozdzia 12 Wst p do CCR i DSS 243Instalacja rodowiska Microsoft Robotics 245

Mo liwe problemy z uruchomieniem rodowiska Robotics 247Kompilacja i uruchamianie projektoacutew do czonych do ksi ki 248

CCR i DSS w pigu ce 249Czujniki i urz dzenia mdash tworzenie pierwszej us ugi 249Serwisy partnerskie 265

Rozdzia 13 Skalowalne rozwi zanie dla systemoacutew rozproszonychna bazie technologii CCR i DSS 277

Opoacute nione uruchamianie 291Uruchamianie oblicze na klastrze 293Podsumowanie 298Zadania 299

Kup książkę Poleć książkę

6 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 14 Wprowadzenie do Reactive ExtensionsZarz dzanie sekwencjami zdarze 301

Programowanie reaktywne 302IObservableltTgt 303IObserverltTgt 303Dualizm interaktywno-reaktywny 304Obserwator mdash wzorzec projektowy 305

Platforma Rx 306Biblioteki Rx 307

Gramatyka Rx 309Jak korzysta z interfejsoacutew w Rx 309Subskrypcje 312LINQ do zdarze 315

Zimne i gor ce obserwable 329

Rozdzia 15 Wspoacute bie no w Rx 333Zarz dzanie roacutewnoleg o ci 333

Interfejs IScheduler 334Plani ci 335Metody SubscribeOn i ObserveOn 339S owo o unifikacji 343

Rozdzia 16 Przyk ady u ycia technologii Rx w aplikacjach WPF 345Rysowanie z u yciem Rx 346Wyszukiwarka 353

Rozdzia 17 CUDA w NET 365Konfiguracja rodowiska dla CUDAfyNET 366Pierwsze kroki 368Hello World czyli pierwszy program CUDAfyNET 370Emulator GPU 375W asno ci GPU 376Przekazywanie parametroacutew do kerneli 378Operacje na pami ci globalnej karty graficznej 380Pomiar czasu wykonania 383Dost p zwarty do pami ci globalnej i pami wspoacute dzielona 386Generator liczb pseudolosowych 390FFT na GPU 392BLAS 394Zadania 395

Dodatek A Biblioteka TPL w WinRT 397Zadania 398Struktura SpinWait 400Usypianie w tkoacutew 400Pula w tkoacutew 401ThreadPoolTimer 402Podobie stwa 403Przeno na biblioteka 404Zadania 406

Kup książkę Poleć książkę

Spis tre ci 7

Dodatek B Dobre praktyki programowania aplikacji wielow tkowych 407Wprowadzenie 407Sekcje krytyczne i zakleszczenia 407Wy cig 411S owo kluczowe volatile i kontrola p tli wykonywanej w ramach funkcji w tku 417Bezpiecze stwo w tkoacutew a konstruktory i pola statyczne 419

Dodatek C Menad er pakietoacutew NuGet 423Instalacja NuGet 423Korzystanie z NuGet 425

Skorowidz 427

Kup książkę Poleć książkę

8 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

6 Programowanie roacutewnoleg e i asynchroniczne w C 50

Rozdzia 14 Wprowadzenie do Reactive ExtensionsZarz dzanie sekwencjami zdarze 301

Programowanie reaktywne 302IObservableltTgt 303IObserverltTgt 303Dualizm interaktywno-reaktywny 304Obserwator mdash wzorzec projektowy 305

Platforma Rx 306Biblioteki Rx 307

Gramatyka Rx 309Jak korzysta z interfejsoacutew w Rx 309Subskrypcje 312LINQ do zdarze 315

Zimne i gor ce obserwable 329

Rozdzia 15 Wspoacute bie no w Rx 333Zarz dzanie roacutewnoleg o ci 333

Interfejs IScheduler 334Plani ci 335Metody SubscribeOn i ObserveOn 339S owo o unifikacji 343

Rozdzia 16 Przyk ady u ycia technologii Rx w aplikacjach WPF 345Rysowanie z u yciem Rx 346Wyszukiwarka 353

Rozdzia 17 CUDA w NET 365Konfiguracja rodowiska dla CUDAfyNET 366Pierwsze kroki 368Hello World czyli pierwszy program CUDAfyNET 370Emulator GPU 375W asno ci GPU 376Przekazywanie parametroacutew do kerneli 378Operacje na pami ci globalnej karty graficznej 380Pomiar czasu wykonania 383Dost p zwarty do pami ci globalnej i pami wspoacute dzielona 386Generator liczb pseudolosowych 390FFT na GPU 392BLAS 394Zadania 395

Dodatek A Biblioteka TPL w WinRT 397Zadania 398Struktura SpinWait 400Usypianie w tkoacutew 400Pula w tkoacutew 401ThreadPoolTimer 402Podobie stwa 403Przeno na biblioteka 404Zadania 406

Kup książkę Poleć książkę

Spis tre ci 7

Dodatek B Dobre praktyki programowania aplikacji wielow tkowych 407Wprowadzenie 407Sekcje krytyczne i zakleszczenia 407Wy cig 411S owo kluczowe volatile i kontrola p tli wykonywanej w ramach funkcji w tku 417Bezpiecze stwo w tkoacutew a konstruktory i pola statyczne 419

Dodatek C Menad er pakietoacutew NuGet 423Instalacja NuGet 423Korzystanie z NuGet 425

Skorowidz 427

Kup książkę Poleć książkę

8 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Spis tre ci 7

Dodatek B Dobre praktyki programowania aplikacji wielow tkowych 407Wprowadzenie 407Sekcje krytyczne i zakleszczenia 407Wy cig 411S owo kluczowe volatile i kontrola p tli wykonywanej w ramach funkcji w tku 417Bezpiecze stwo w tkoacutew a konstruktory i pola statyczne 419

Dodatek C Menad er pakietoacutew NuGet 423Instalacja NuGet 423Korzystanie z NuGet 425

Skorowidz 427

Kup książkę Poleć książkę

8 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

8 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1

Dla niecierpliwychasynchronicznoi p tla roacutewnoleg a

Jacek Matulewski

Zgodnie z zasad Pareto w wi kszo ci przypadkoacutew czytelnicy b d potrzebowali tylkoznikomej cz ci wiedzy przedstawionej w tej ksi ce Postanowi em wobec tego w roz-dziale 1 opisa dwie nowo ci platformy NET 40 i 45 ktoacutere wydaj mi si najwa -niejsze i ktoacutere prawdopodobnie b d najcz ciej u ywane w programach czytelnikoacutew

Programowanie asynchroniczneOperator await i modyfikator async(nowo j zyka C 50i platformy NET 45)

J zyk C 50 wyposa ony zosta w nowy operator await u atwiaj cy synchronizacjdodatkowych zada uruchomionych przez u ytkownika Poni ej zaprezentuj prostyprzyk ad jego u ycia ktoacutery powinien wyja ni jego dzia anie Dzia anie tego operatorazwi zane jest ci le z bibliotek TPL (ang Task Parallel Library) i jej sztandarow klasTask ktoacutere zostan omoacutewione w kolejnych rozdzia ach Jednak podobnie jak w przypad-ku opisanej ni ej p tli roacutewnoleg ej ParallelFor tak i w przypadku operatora awaitdog bna znajomo biblioteki TPL nie jest konieczna

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

14 Programowanie roacutewnoleg e i asynchroniczne w C 50

Spoacutejrzmy na przyk ad widoczny na listingu 11 w ktoacuterym przedstawiam metod zdarze-niow przycisku Zdefiniowana jest w niej przyk adowa akcja pobieraj ca obiekt typuobject a zwracaj ca liczb ca kowit long Referencj do niej zapisuj w zmiennejakcja i uruchamiam j (synchronicznie) Czynno owa wprowadza jednosekundoweopoacute nienie za pomoc metody ThreadSleep (nale y zadeklarowa u ycie przestrzeninazw SystemThreading1) ktoacutere mdash oczywi cie mdash opoacute nia wykonywanie ca ej metodyzdarzeniowej po klikni ciu przycisku W efekcie na jedn sekund aplikacja zamiera

Listing 11 Synchroniczne wykonywanie kodu zawartego w akcji

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

msgBox(button1_Click Pocz tek) msgBox(Wynik +akcja(synchronicznie)) msgBox(button1_Click Koniec)

void msgBox(string komunikat) string taskID = TaskCurrentIdHasValue TaskCurrentIdToString() UI MessageBoxShow( + komunikat + ( + taskID + ))

W metodzie przedstawionej na listingu 12 ta sama akcja wykonywana jest asynchro-nicznie w osobnym w tku utworzonym przez platform NET na potrzeby zdefinio-wanego tu zadania (instancja klasy Task z TPL) Synchronizacja nast puje w momencieodczytania warto ci zadanieResult czyli warto ci zwracanej przez czynno akcjaJej sekcja get czeka ze zwroacuteceniem warto ci a do zako czenia akcji wykonywanejprzez zadanie wstrzymuj c do tego czasu w tek w ktoacuterym wykonywana jest metodabutton1_Click Jest to zatem typowy punkt synchronizacji cho troch ukryty Wartozwroacuteci uwag e po instrukcji zadanieStart() a przed odczytaniem w asno ci zadanieResult mog by wykonywane dowolne czynno ci o ile s niezale ne od warto ci

zwroacuteconej przez zadanie

Listing 12 U ycie zadania do asynchronicznego wykonania kodu

private void button1_Click(object sender EventArgs e) Funcltobject longgt akcja = (object argument) =gt

1 Alternatywnie mogliby my u y instrukcji await TaskDelay(1000) ale woacutewczas musieliby my

oznaczy wyra enie lambda jako async a wtedy nale a oby referencj do niego zapisa w zmiennejtypu Funcltobject Taskltlonggtgt

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 15

msgBox(Akcja Pocz tek argument + argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja zadanie) zadanieStart() msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik +zadanieResult) msgBox(button1_Click Koniec)

Nie jest konieczne aby instrukcja odczytania w asno ci Result znajdowa a si w tejsamej metodzie co uruchomienie zadania mdash nale y tylko do miejsca jej odczytaniaprzekaza referencj do zadania (w naszym przypadku zmienn typu Taskltlonggt) Zwy-kle referencj t przekazuje si jako warto zwracan przez metod uruchamiaj czadanie Przyk ad takiej metody widoczny jest na listingu 13 Je eli u ywamy angielskichnazw metod jest zwyczajem aby metoda tworz ca i uruchamiaj ca zadanie mia y przy-rostek Async

Listing 13 Wzoacuter metody wykonuj cej jak czynno asynchronicznie

Taskltlonggt DoSomethingAsync(object argument) Funcltobject longgt akcja = (object _argument) =gt msgBox(Akcja Pocz tek argument + _argumentToString()) ThreadSleep(1000) opoacute nienie msgBox(Akcja Koniec) return DateTimeNowTicks

Taskltlonggt zadanie = new Taskltlonggt(akcja argument) zadanieStart() return zadanie

protected void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(zadanie-metoda) msgBox(Akcja zosta a uruchomiona) if (zadanieStatus = TaskStatusRunning ampamp zadanieStatus=TaskStatusRanToCompletion) msgBox(Zadanie nie zosta o uruchomione) else msgBox(Wynik + zadanieResult) msgBox(button1_Click Koniec)

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

16 Programowanie roacutewnoleg e i asynchroniczne w C 50

Po tym wprowadzeniu mo emy przej do omoacutewienia zasadniczego tematu Wraz z wer-sjami 40 i 45 w platformie NET (oraz w platformie Windows Runtime) pojawi o siwiele metod podobnych do przedstawionej powy ej metody DoSomethingAsync (ale mdashoczywi cie mdash w odroacute nieniu od niej robi cych co po ytecznego) Metody te wykonujasynchronicznie roacute nego typu d ugotrwa e czynno ci Znajdziemy je w klasie HttpClientw klasach odpowiedzialnych za obs ug plikoacutew (StorageFile StremWriter StreamReader XmlReader) w klasach odpowiedzialnych za kodowanie i dekodowanie ob-

razoacutew czy w klasach WCF Asynchroniczno jest wr cz standardem w aplikacjachWindows 8 z interfejsem Modern UI I w a nie po to aby ich u ycie by o (prawie) takproste jak metod synchronicznych wprowadzony zosta w C 50 (co odpowiada plat-formie NET 45) operator await U atwia on synchronizacj dodatkowego zadania two-rzonego przez te metody Nale y jednak pami ta e metod w ktoacuterej chcemy u y ope-ratora await musimy oznaczy modyfikatorem async Prezentuj to na listingu 14

Listing 14 Przyk ad u ycia modyfikatora async i modyfikatora await

protected async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) Taskltlonggt zadanie = DoSomethingAsync(asyncawait) msgBox(Akcja zosta a uruchomiona) long wynik = await zadanie msgBox(Wynik + wynik) msgBox(button1_Click Koniec)

Operator await zwraca parametr u yty w klasie parametrycznej Taskltgt Zatem w przy-padku zadania typu Taskltlonggt b dzie to zmienna typu long Je eli u yta zosta a wersjanieparametryczna klasy Task operator zwraca void i s u y jedynie do synchronizacji(nie przekazuje wyniku nieparametryczna klasa Task nie ma tak e w asno ci Result)

Metody oznaczone modyfikatorem async nazywane s w angielskiej dokumentacji MSDNasync method Mo e to jednak wprowadza pewne zamieszanie Z powodu tej nazwymetody z modyfikatorem async (w naszym przypadku metoda Button1_Click) uto -samiane s z metodami wykonuj cymi asynchronicznie jakie czynno ci (a tak w na-szym przypadku jest DoSomethingAsync) Osobom poznaj cym dopiero temat cz stowydaje si e aby metoda wykonywana by a asynchronicznie wystarczy doda do jejsygnatury modyfikator async To nie jest prawda

Mo emy wywo a metod DoSomethingAsync w taki sposoacuteb e umie cimy j bezpo-rednio za operatorem await np long wynik = await DoSomethingAsync(asyncawait) Jaki to ma sens Wykonywanie metody button1_Click w ktoacuterej znajduje

si to wywo anie zostanie wstrzymane a do momentu zako czenia metody DoSomethingAsync wi c efekt jaki zobaczymy na ekranie b dzie identyczny z wynikiem w przy-

padku synchronicznym (listing 11) Roacute nica jest jednak wyra na i to jest zasadniczanowo bo instrukcja zawieraj ca operator await nie blokuje w tku w ktoacuterym wywo anazosta a metoda button1_Click Kompilator zawiesza wywo anie metody button1_Clickprzechodz c do kolejnych czynno ci w miejscu jej wywo ania a do momentu zako -czenia uruchomionego zadania W momencie gdy to nast pi w tek wraca do metody

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 17

button1_Click i kontynuuje jej dzia anie2 Jednak w programie na ktoacuterym w tejchwili testujemy operator await efektoacutew tego nie zobaczymy Efekt b dzie widocznydopiero wtedy gdy metod button1_Click wywo amy z innej metody mdash niech b dzieto metoda zdarzeniowa button2_Click zwi zana z drugim przyciskiem Nale y za-uwa y e w serii instrukcji wywo anie metody oznaczonej modyfikatorem async niemusi si zako czy przed wykonaniem nast pnej instrukcji mdash i w tym sensie jest onaasynchroniczna Aby tak si sta o musi w niej jednak zadzia a operator await czekaj cyna wykonanie jakiego zadania (w naszym przyk adzie metody DoSomethingAsync)W efekcie w scenariuszu przedstawionym na listingu 15 metoda button2_Click zako -czy si przed zako czeniem button1_Click

Listing 15 Dzia anie modyfikatora async

private async void button1_Click(object sender EventArgs e) msgBox(button1_Click Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(Wynik + wynikToString()) msgBox(button1_Click Koniec)

private void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) button1_Click(null null) msgBox(button2_Click Koniec)

Wa na rzecz samo u ycie operatora await i modyfikatora async nie powoduje utwo-rzenia nowych zada lub w tkoacutew Powoduje jedynie przekazanie na pewien czas ste-rowania z metody w ktoacuterej znajduje si operator await i oznaczonej modyfikatoremasync do metody ktoacutera j wywo a a i powroacutet w momencie uko czenia zadania najakie czeka await Koszt jest zatem niewielki i rozwi zanie to mo e by z powodzeniemstosowane bez obawy o utrat wydajno ci Ponadto w a nie z uwagi na wydajno operator await sprawdza czy w momencie w ktoacuterym dociera do niego sterowaniemetoda asynchroniczna nie jest ju zako czona Je eli tak praca kontynuowana jest syn-chronicznie bez zb dnych skokoacutew

Metoda z modyfikatorem async mo e zwraca warto void mdash tak jak w przedsta-wionej wy ej metodzie zdarzeniowej button1_Click Jednak w takim przypadku jejdzia anie nie mo e by aden sposoacuteb synchronizowane Po uruchomieniu nie mamynad ni adnej kontroli Szczegoacutelnie nie mo na u y operatora await ani metody Waitklasy Task aby poczeka na jej zako czenie eby to by o mo liwe metoda z mody-fikatorem async musi zwraca referencj Task lub Taskltgt Woacutewczas mo liwe jest u ycieoperatora await za ktoacuterym mo na zreszt ustawi dowolne wyra enie o warto ci Task

2 Aby taki efekt uzyska bez operatora await nale a oby u y konstrukcji opartej na funkcjach

zwrotnych (ang callback) W efekcie kod sta by si raczej skomplikowany i przez to podatny nab dy Warto te zauwa y e await nie jest prostym odpowiednikiem metody TaskWait ktoacutera poprostu zatrzyma aby bie cy w tek do momentu zako czenia zadania W przypadku operatora awaitnast pi przekazanie sterowania do metody wywo uj cej i powroacutet w momencie zako czenia zadania

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

18 Programowanie roacutewnoleg e i asynchroniczne w C 50

lub Taskltgt (zmienne i w asno ci tego typu oraz metody lub wyra enia lambda zwra-caj ce warto tego typu3) Przekazane zadanie umo liwia synchronizacj Ponadtou ycie wersji parametrycznej pozwala na zwroacutecenie warto ci przekazywanej potemprzez operator await

Sprawd my to tworz c odpowiednik metody button1_Click ze zmienion sygnatur (niemo emy tego zrobi z orygina em bo jest zwi zany ze zdarzeniem button1Click)Nowa metoda o nazwie DoSomethingMoreAsync widoczna jest na listingu 164 Usun emargumenty ktoacuterych i tak nie u ywali my i zmieni em zwracan warto z void naTask Dzi ki temu metoda ta nie jest ju typu bdquowystrzel i zapomnijrdquo a mo e by kon-trolowana z miejsca uruchomienia (zob widoczna roacutewnie na listingu 16 metodabutton2_Click) Zdziwienie mo e budzi jednak fakt e za s owem kluczowym returnw metodzie DoSomethingMoreAsync wcale nie ma instrukcji tworz cej zwracane przezt metod zadanie (instrukcji return mog oby wcale nie by ) W metodach z modyfi-katorem async i zwracaj cych warto Task zadanie jest przypisywane przez kompi-lator W ten sposoacuteb u atwiona jest wielostopniowa obs uga metod asynchronicznychNale y jednak pami ta e te metody nie tworz nowych zada a jedynie je przekazuj

Listing 16 Metoda async zwracaj ca zadanie

private async Task DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) await DoSomethingMoreAsync() msgBox(button2_Click Koniec)

A co w przypadku metod async ktoacutere mia yby zwraca warto Za oacute my e metodaDoSomethingMore mia aby zwraca warto typu long (np warto zmiennej wynik)Wtedy nale y zmieni typ tej metody na Taskltlonggt a za s owem kluczowym returnwstawi warto typu long Pokazuj to na listingu 17 Warto zapami ta cho touproszczone stwierdzenie e w metodach async operator await wy uskuje z typu Taskltgtparametr a s owo kluczowe return w metodach async zwracaj ce warto typu Taskltgtdzia a odwrotnie mdash otacza dowolne obiekty typem Taskltgt

3 Prawd moacutewi c nale a oby to stwierdzenie u ci li bo nie tylko zadania mog by argumentem

operatora await a ka dy typ ktoacutery zwraca metod GetAwaiter Wi cej informacji dost pnych jestna stronie FAQ zespo u odpowiedzialnego za implementacj mechanizmu asyncawait w platformieNET (httpblogsmsdncombpfxteamarchive2012041210293335aspx)

4 Warto zwroacuteci uwag na przyrostek bdquoAsyncrdquo W ko cu jest to teraz metoda ktoacutera dzia a asynchroniczniecho adnego zadania nie tworzy

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 19

Listing 17 Metoda async zwracaj ca warto long

private async Taskltlonggt DoSomethingMoreAsync() msgBox(DoSomethingMoreAsync Pocz tek) long wynik = await DoSomethingAsync(asyncawait) msgBox(DoSomethingMoreAsync Wynik + wynikToString()) msgBox(DoSomethingMoreAsync Koniec) return wynik

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) msgBox(button2_Click Koniec)

I kolejna sprawa Co w metodach async dzieje si w przypadku b doacutew Nieobs u o-ne wyj tki zg oszone w metodzie z modyfikatorem async i zwracaj ce zadania (Tasklub Taskltgt) s za po rednictwem tych zada przekazywane do metody wywo uj cejMo na zatem u y normalnej konstrukcji trycatch jak na listingu 18 Gorzej jestw przypadku metod async zwracaj cych void (typu bdquowystrzel i zapomnijrdquo jak button1_Click z naszego przyk adu) Woacutewczas wyj tek przekazywany jest do puli w tkoacutew

kryj cej si za mechanizmem zada i przechwytywanie wyj tkoacutew nic nie da

Listing 18 Obs uga wyj tkoacutew zg aszanych przez metody async

private async void button2_Click(object sender EventArgs e) msgBox(button2_Click Pocz tek) try msgBox(button2_Click Wynik + await DoSomethingMoreAsync()) catch(Exception exc) msgBox(button2_Click B dn + excMessage) msgBox(button2_Click Koniec)

Klasa Parallel z biblioteki TPL(nowo platformy NET 40)

Do platformy NET w wersji 40 dodana zosta a biblioteka TPL (ang Task ParallelLibrary) ktoacutera wraz ze zroacutewnoleglonym PLINQ i kolekcjami przystosowanymi dokonkurencyjnej obs ugi sk ada si na tzw Parallel Extensions Biblioteka TPL nad-budowuje klasyczne w tki korzystaj c z poznanej ju przed chwil klasy Task (z ang

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

20 Programowanie roacutewnoleg e i asynchroniczne w C 50

zadanie) Biblioteka ta zostanie dok adnie opisana w nast pnych rozdzia ach Tu chcia -bym skupi si tylko na najcz ciej u ywanym jej elemencie mdash implementacji wspoacute -bie nej p tli For

Roacutewnoleg a p tla For

Za oacute my e mamy zbioacuter stu liczb rzeczywistych dla ktoacuterych musimy wykona jakiestosunkowo czasoch onne czynno ci W naszym przyk adzie b dzie to obliczaniewarto ci funkcji f(x) = arcsin(sin(x)) Funkcja ta powinna z dok adno ci numerycznzwroacuteci warto argumentu x Zrobi to ale nie le si przy tym nam czy mdash funkcjetrygonometryczne s do wymagaj ce numerycznie Dodatkowo powtoacuterzymy te obli-czenia kilkakrotnie aby jeszcze bardziej wyd u y czas oblicze Kod odpowiedniejmetody z projektu aplikacji konsolowej widoczny jest na listingu 19

Listing 19 Metoda zajmuj ca procesor

private static double obliczenia(double argument) for (int i = 0 i lt 10 ++i) argument = MathAsin(MathSin(argument)) return argument

Z kolei na listingu 110 widoczna jest p tla wykonuj ca owe obliczenia wraz z przy-gotowaniem tablicy z wynikami Wyniki te nie s jednak drukowane mdash tablica jestzbyt du a eby to mia o sens Poni szy kod zawiera dwie zagnie d one p tle ForInteresuje nas tylko wewn trzna Zadaniem zewn trznej jest wielokrotne powtoacuterzenieoblicze co pozwoli nam bardziej wiarygodnie zmierzy czas oblicze Pomiary te reali-zujemy na bazie zliczania taktoacutew procesora (SystemEnvironmentTickCount)

Listing 110 Obliczenia sekwencyjne

static void Main(string[] args) przygotowania int rozmiar = 10000 Random r = new Random() double[] tablica = new double[rozmiar] for(int i=0ilttablicaLength++i) tablica[i] = rNextDouble()

obliczenia sekwencyjne int iloscPowtorzen = 100 double[] wyniki = new double[tablicaLength] int start = SystemEnvironmentTickCount for(int powtorzenia = 0 powtorzenialtiloscPowtorzen++powtorzenia) for(int i=0ilttablicaLength ++i) wyniki[i] = obliczenia(tablica[i]) int stop = SystemEnvironmentTickCount ConsoleWriteLine(Obliczenia sekwencyjne trwa y + (stop - start)ToString() + ms)

prezentacja wynikoacutew

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 21

string s = Wynikin for(int i=0ilttablicaLength++i) s += i + + tablica[i] + = + wyniki[i] + n ConsoleWriteLine(s)

Przy u yciu klasy Parallel z przestrzeni nazw SystemThreadingTasks mo na bezwi kszego wysi ku zroacutewnolegli p tl for z metody Main (t z indeksem i) Pokazujeto kod z listingu 111 Nale y go doda do metody z listingu 110

Listing 111 Przyk ad zroacutewnoleglonej p tli for

obliczenia roacutewnoleg estart = SystemEnvironmentTickCountfor(int powtorzenia = 0 powtorzenia lt iloscPowtorzen ++powtorzenia) ParallelFor(0 tablicaLength i=gt wyniki[i] = obliczenia(tablica[i]) )stop = SystemEnvironmentTickCountConsoleWriteLine(Obliczenia roacutewnoleg e trwa y + (stop - start)ToString() + ms)

Metoda ParallelFor jest do intuicyjna w u yciu Jej dwa pierwsze argumenty okre-laj zakres zmiany indeksu p tli W naszym przypadku jest on roacutewny [01000) Wo-

bec tego do metody podanej w trzecim argumencie przekazywane s liczby od 0 do 999Trzeci argument jest delegatem do ktoacuterego mo na przypisa metod lub jak w naszymprzypadku wyra enie lambda wywo ywane w ka dej iteracji p tli Powinna si tamzatem znale zawarto oryginalnej p tli

Metoda ParallelFor automatycznie synchronizuje u ywane przez ni zadania przedzako czeniem dlatego nie ma zagro enia zamazania danych w ramach kolejnych powtoacute-rze (zewn trzna p tla for)

To e tworzenie roacutewnoleg ej p tli ParallelFor jest jak to moacutewi Anglicy out of thebox nie oznacza e automatycznie unikamy wszystkich problemoacutew jakie w roacutewnole-g ych p tlach mog powsta Szczegoacutelnie nale y zwroacuteci uwag na spraw podsta-wow mi dzy iteracjami p tli nie mo e by rekurencyjnej zale no ci a wi c kolejnaiteracja nie mo e zale e od warto ci jakie zmiennej policzonej w poprzedniej iteracjiIteracje w roacutewnoleg ej p tli nie s przecie wykonywane w kolejno ci indeksoacutew Na-le y tak e uwa a na ukryte zale no ci rekurencyjne Przyk adem w ktoacuterym kryj sitakie zale no ci jest cho by klasa Random

Nie nale y si spodziewa e dzi ki u yciu roacutewnoleg ej p tli nasze obliczenia przy-spiesz tyle razy ile rdzeni procesora mamy do dyspozycji Tworzenie i usuwanie zadaroacutewnie zajmuje nieco czasu Eksperymentuj c z rozmiarem tablicy i liczb oblicza-nych sinusoacutew mo na sprawdzi e zroacutewnoleglanie op aca si tym bardziej im d u szes obliczenia wykonywane w ramach jednego zadania Dla kroacutetkich zada u ycie roacutew-noleg ej p tli mo e wr cz wyd u y ca kowity czas oblicze W moich testach na kom-puterze z jednym procesorem dwurdzeniowym czas oblicze zmniejszy si do mniejwi cej czasu oblicze sekwencyjnych Z kolei przy a o miu rdzeniach czas obli-cze roacutewnoleg ych spad tylko do nieco ponad

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

22 Programowanie roacutewnoleg e i asynchroniczne w C 50

Przedstawione w tym rozdziale informacje o klasie Parallel i jej metodzie For na-le y traktowa jedynie jako zapowied rozdzia u 7 w ktoacuterym klasa ta zostanieomoacutewiona bardziej wyczerpuj co

Przerywanie p tli

Podobnie jak w klasycznej p tli for roacutewnie w jej roacutewnoleg ej wersji mo emy w ka dejchwili przerwa dzia anie p tli S u y do tego klasa ParallelLoopState ktoacutera mo eby przekazana w dodatkowym argumencie metody wykonywanej w ka dej iteracjiKlasa ta udost pnia dwie wa ne metody Break i Stop Roacute ni si one tym e pierwszapozwala na wcze niejsze zako czenie bie cej iteracji a nast pne nie b d ju uru-chamiane podczas gdy metoda Stop nie tylko natychmiast ko czy bie ce zadanieale roacutewnie podnosi flag IsStopped ktoacutera mo e by sprawdzona we wszystkich uru-chomionych wcze niej iteracjach co powinno by dla nich sygna em do zako czeniadzia ania (je eli programista uwzgl dni to w ich kodzie) Na listingu 112 pokazujprzyk ad w ktoacuterym p tla jest przerywana je eli wylosowana zostanie liczba 0

Listing 112 Przerywanie p tli roacutewnoleg ej

private static void przerywaniePetli() Random r = new Random() long suma = 0 long licznik = 0 string s =

iteracje zostan wykonane tylko dla liczb parzystych p tla zostanie przerwana wcze niej je eli wylosowana liczba jest wi ksza od 90 ParallelFor( 0 10000 (int i ParallelLoopState stanPetli) =gt int liczba = rNext(7) losowanie liczby oczek na kostce if(liczba == 0) s += 0 (Stop) stanPetliStop() if(stanPetliIsStopped) return if(liczba 2 == 0) s += liczbaToString() + obliczenia(liczba) suma += liczba licznik += 1 else s += liczbaToString() + )

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Rozdzia 1 Dla niecierpliwych asynchroniczno i p tla roacutewnoleg a 23

ConsoleWriteLine( Wylosowane liczby + s + n + Liczba pasuj cych liczb + licznik + n + Suma + suma + n + rednia + (suma (double)licznik)ToString())

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

24 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz

A

ActiveX 124adres

http 256URL 256

agregacja kolekcji roacutewnoleg ych 199Albahari Joe 64algorytm

braci Borwein 47spigot 47

Apartment Threaded Model Patrz ATMaplikacja

desktopowa 95 124 215 251domena Patrz domena aplikacjiGitHub 302instancja 89kliencka 302konsolowa 26 28 80 215 237 307 339 397przebieg pracy 419roacutewnoleg a 225

profiler 225 232rysuj ca 350sieciowa 215webowa 237wielow tkowa 40 187 189 407 411Windows Forms 96 104 105Windows Store 397WinRT 397WPF 116 219z interfejsem graficznym 397

async method 16ATI Stream 365ATM 124

B

BackgroundWorker 110 114bariera 86 104 184Bart de Smet 346Base Class Library Patrz BCLBasic Linear Algebra Subprograms Patrz BLASbaz danych SQL 212BCL 303bezpiecze stwo 40 77 104 124 419biblioteka

Bing Search API 355BLAS Patrz BLASCCR Patrz CCRcuBLAS 394CUDAfyNet 376CUDAfyNET 366CudafyNETdll 371cuFFT 392cuRAND 390 392DLL 404DSS Patrz DSSKinect for Windows 246klas podstawowa Patrz BCLkontrolek WPF 345licencja 423Microsoft Silverlight 246Portable Class Library 307ReactiveCocoa Patrz ReactiveCocoaRx Patrz RxSystemDataServicesClientdll 357TPL Patrz TPLWindows Forms 96

Bing 345 353 357

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

428 Programowanie roacutewnoleg e i asynchroniczne w C 50

Bing Search API 353BLAS 394blokada 77 179 181 188 191

wiruj ca 45broadcast Patrz rozg aszanie

C

C for CUDA 365callback function Patrz funkcja odpowiedziCCR 243 244 249 276 277 291 298CLR 31cold observable Patrz obserwabla zimnaCOM 124Common Language Runtime Patrz CLRComponent Object Model Patrz COMcompute capability Patrz karta graficzna

potencja obliczeniowyCompute Unified Device Architecture

Patrz CUDAConcurrency and Coordination Runtime

Patrz CCRConcurrency Visualizer 225 232 237Console Application Patrz aplikacja konsolowaCUDA 365CUDAfyNET 366 368 376czas

oblicze 20 383wirtualny 334 335

D

danemetody przekszta caj ce 208partycjonowanie 175podzia 205 213przekazywane do zadania 140przesy anie do w tku 45spychane 303SQL 212struktura wspoacute bie na 187 188w programowaniu roacutewnoleg ym 187 188wspoacute dzielone przez w tki 40 187wyci ganie 302zwracane przez zadanie 141

DCOM 124deadlock Patrz zakleszczeniedebugowanie 93 148 225 227Decentralized Software Services Patrz DSSdekompilator ILSpy Patrz ILSpy

delegat 108 110 138diagram koralikowy 315 316 320dokumentacja MSDN 16 33 149 155 205 399domena aplikacji 31DSS 243 244 249 276 277 291 298

konsola Command Prompt 293

E

edytor XAML Patrz XAMLEuler Leonhard 47extension method Patrz metoda rozszerzaj ca

F

factory method Patrz metoda tworz caFFT 392FIFO Patrz kolejka FIFOflaga 34 239 302

IsStopped 22Fouriera transformata szybka Patrz FFTfunkcja

odpowiedzi 302WinAPI InterlockedAdd 52

G

General-Purpose computing on GraphicsProcessor Units Patrz GPGPU

generator liczblosowych 36 37pseudolosowych 59 390 392

GPGPU 365GPU 365 372

emulator 375Graphical User Interface Patrz interfejs

u ytkownikaGUI Patrz interfejsu ytkownika

H

Hadamarda iloczyn 378hot observable Patrz obserwabla gor caHybrid DSP 366

I

identyfikatorkontraktu 245sekcji krytycznej 44us ugi 245

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz 429

iloczynHadamarda 378po wspoacute rz dnych 378Schura 378

ILSpy 368 369inicjacja

leniwa Patrz inicjacja z opoacute nieniemz opoacute nieniem 60 61 62 63

instancjaaplikacji Patrz aplikacja instancjaprogramu 31 Patrz te w tek

interfejsgraficzny 397ICollection 304IEnumerable 156 188 203 304IEnumerator 304implementacja 309IObservable 303 304 305 309 315 316 334

346IObserver 303 305 309 312 315 334IProducerConsumerCollection 78 155 187

188 191 193 195IScheduler 334stron internetowych 251u ytkownika 95 96

aktualizacja 110w tek Patrz w tek interfejsu u ytkownika

J

j dro Patrz kernelj zyk XAML Patrz XAML

K

karta graficzna 365 371 376 390czas oblicze 383pami 380 381 387potencja obliczeniowy 368 370 375uchwyt 372

kernel 366 372 373 386wywo anie 373 374

Kinect 246klasa

AutoResetEvent 85 184BackgroundWorker 111Barrier 86 88BlockingCollection 78 190 191 192CancellationToken 145 154 166 209CancellationTokenSource 209

ConcurrentBag 188 189ConcurrentDictionary 188ConcurrentQueue 188 190ConcurrentStack 188 190CountdownEvent 51CudafyHost 372 376CudafyModule 372CudafyTranslator 369 373Dictionary 337Dispatcher 345DispatcherTimer 402EnlightenmentProvider 343Enumerable 204EventWaitHandle 85 184FFTPlan1D 392GPGPU 372 384GPGPUProperties 376GThread 378 388HttpClient 16instancja 45Interlocked 64 188 412Lazy 60leniwa 61List 399ManualResetEvent 85 184ManualResetEventSlim 184Monitor 44 50 413Mutex 88 89Observable 316 339odpowiedzialna za obs ug plikoacutew 16Parallel 22 138 161 403ParallelEnumerable 199 203ParallelLoopResult 168ParallelLoopState 22 168ParallelOptions 166ParallelQuery 199Partitioner 175 187Queue 189Random 21ReaderWriterLock 73ReaderWriterLockSlim 73 77SemaphorSlim 93SpinLock 45Stack 189statyczna 49 316StorageFile 16StreamReader 16StremWriter 16SynchronizationContext 128 334 345

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

430 Programowanie roacutewnoleg e i asynchroniczne w C 50

klasaSystemThreadingInterlocked 52 53SystemThreadingLazyInitializer 63SystemThreadingTimer 54Task 13 19 138 144 398 399 400TaskContinuationOptions 154TaskCreationOptions 154TaskFactory 138 144 152 153TaskScheduler 138 154 155Thread 29 334 399 400ThreadPool 48 343 401ThreadPoolTimer 402Timer 402WCF 16WindowsFormsSynchronizationContext 130XmlReader 16

klaster obliczeniowy 277kod XAML 116kolejka

FIFO 155 156 189 191wiadomo ci 244wspoacute bie na 189

kolekcja 189 191roacutewnoleg a 199wspoacute bie na 189 193

w asna 193 195kompilator 18

C 64JIT 64

komponent wizualny 124komunikat 239 251konsola

DSS Command Prompt 293Xbox 360 404

kontrolka 103 108 110 215 339BackgroundWorker 25Timer 25WPF 345

kursor myszy 346 348

L

Language INtegrated Query Patrz LINQLego Mindstorms 243 249liczba

losowa 37pierwsza 141 215

25 47 115 170 277LIFO Patrz stos

linia obrazu 95 99LINQ 203 205 209 212 301 315

do zdarze 302 306 315 316lock Patrz blokadalog 419

M

macierz 378 379 380 388 394manifest 251Manifest Load Results Patrz manifestmarble diagram Patrz diagram koralikowymarmurki 315maszyna wirtualna 31MATLAB 365metoda

Add 191Aggregate 199AllocateShared 388AsOrdered 208 209AsParallel 138 199 209AsSequential 209AsUnordered 208 209async 18

b dy 19zwracaj ca warto 18

asynchroniczna 131BackgroundWorkerCancelAsync 110BackgroundWorkerDoWork 110 114BackgroundWorkerProgressChanged 110BackgroundWorkerRunWorkerAsync 110BackgroundWorkerRunWorkerCompleted 110blokuj ca 131 191 357Break 22Buffer 324 326 327Cancel 210CancellationTo-

kenThrowIfCancellationRequested 146 147CancellationTokenSourceCancel 145 168CombineLatest 323ConsoleWriteLine 382ContinueWhenAny 144ControlBeginInvoke 107 108 131ControlDispatcherBeginInvoke 128 131ControlDispatcherInvoke 128ControlEndInvoke 131ControlInvoke 104 107 108 124 130 131CountDownEvent 188Create 392Cudafy 369

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz 431

Delay 400DropHandler 244EnsureInitialized 63Eulera 47ForEach 138 399FromCurrentSynchronizationContext 221GetConsumingEnumerable 192GetDevice 372GetDeviceProperties 376GetEnumerator 305InterlockedAdd 52 53InterlockedIncrement 412Leave 240LoadModule 372Log 274LogError 274LogInfo 274LogVerbose 274LogWarning 274MessageBoxShow 26MonitorEnter 44 45MonitorExit 44 45 410MonitorPulse 50 81 84 86 182MonitorWait 81 84 86 182MonitorWaitOne 50Monte Carlo 25 47 115 170MoveNext 305nieblokuj ca 263ObservableCreate 310ObservableFromAsyncPattern 357ObservableFromEventPattern 348ObservableGenerate 310ObservableInterval 317ObservableRange 309 323ObservableTimer 319ObservableTimestamp 318ObservableRange 339ObserveOn 339obs ugi zdarze 245OnCompleted 316OnError 304 316OnNext 304 316ParallelFor 21 22 161 162 166 176 403ParallelForEach 161 163 166 176 212ParallelInvoke 161 164ParallelQueryForAll 212Post 128 132przekszta caj ca dane wynikowe 208prze czenie widoku 229

Publish 330rozszerzaj ca 199 203 204 206 316 348Salamina i Brenta 47Schedule 334SemaphoreSlim 188Send 128 132Skip 320Sleep 399 400SpinLock 188SpinLockEnter 45SpinLockExit 45SpinOnce 400SpinWait 188 399StartTimer 384statyczna 31 64 181 373 413Stop 22StopTimer 384SubscribeOn 339Switch 359SynchronizationContextPost 131SynchronizationContextSend 131SystemThreadingThreadVolatileRead 64SystemThreadingThreadVolatileWrite 64Take 191TakeWhile 206TaskContinueWith 143 145 147TaskDelay 399TaskFactoryContinueWhenAll 152 153TaskFactoryContinueWhenAny 152 153TaskFactoryStartNew 152 153 154 179 181TaskWait 138 143 147TaskWaitAll 143 147TaskWaitAny 143 147TaskFactoryContinueWhenAny 153TaskSchedulerFromCurrentSynchronization

Context 219ThreadAbort 30 32 33 44 103ThreadInterrupt 44ThreadJoin 40 135 136ThreadMemoryBarrier 64ThreadResetAbort 34ThreadResume 30 34 80ThreadSleep 14 31 181ThreadSpinWait 140 399 400ThreadSuspend 30 34 80ThreadPoolQueueUserWorkItem 49 333ThreadPoolSetMaxThreads 49Throttle 358ThrowIfCancellationRequested 210

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

432 Programowanie roacutewnoleg e i asynchroniczne w C 50

metodatworz ca 309 319Wait klasy Task 17Window 326WithCancellation 209WithDegreeOfParallelism 205 213WithExecutionMode 213WithMergeOptions 213Wolfa 47zdarzeniowa 110 114 117

przycisku 14Zip 321 323

Microsoft OLE 124Microsoft Robotics 243 248 249 251 276 298

instalacja 246uruchamianie 247zabezpieczenia 293

model STA Patrz STAmodyfikator async 16 17MTA 124Multi-Threaded Apartment Patrz MTAmultithreading Patrz wielow tkowomurmelki 315muteks 88 89 91 93 104

lokalny 89tworzenie 90

MySpace 243mysz 346 348

N

NA 124Neutral Apartment Patrz NANuGet 307 345 423 425

instalacja 423NVidia 365 375

O

obiektCancellationTokenSource 145COM 124 Patrz COMinterfejsu 345j dra 88 89synchronizacji 45Task 152timer Patrz timertypu referencyjnego 45zarz dzany 124

obserwabla 305 310 312czasu 316gor ca 329 330ObservableInterval 317ObservableTimer 319zimna 329 330

obserwator 305odleg o w przestrzeni euklidesowej 199okno

stosoacutew roacutewnoleg ych 229ledzenia zmiennych 230

w tkoacutew 226 227zada roacutewnoleg ych 228

opakowanie 190 365 366 368 369operacja

algebraiczna 394asynchroniczna 302atomowa 51 55 64

operatorasync 403await 13 16 17 18 221 403lock 53 188using 240

optymalizacji wy czanie 64

P

pami ci bariera 64Parallel Extensions 19 137 188Parallel Stacks Window Patrz okno stosoacutew

roacutewnoleg ychParallel Tasks Patrz okno zada roacutewnoleg ychParallel Watch Window Patrz okno

roacutewnoleg ego ledzenia zmiennychpe nomocnictwo 108p tla 161

For 20liczba krokoacutew 175 176ParallelFor 13 189 403przerywanie 166 168roacutewnoleg a 13 20wspoacute bie na Patrz p tla roacutewnoleg a

planista 334CurrentThreadScheduler 336 337DispatcherScheduler 346HistoricalScheduler 335ImmediateScheduler 336 337 339Reactive Extensions 335 336 339

platforma CLR Patrz CLRPLINQ 19 161 199 203 204 205 207 209 212

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz 433

pole statyczne 40 45port TimeoutPort 291powiadomienia 267problem

czytelnikoacutew i pisarzy 73konsumenta i producenta 78 155 188 191pi ciu ucztuj cych filozofoacutew 68

proces 31program

DssHostexe 245 247administrator 251

oparty na wyci ganiu danych 302w ktoacuterym dane sp ywaj 303

programowanieinteraktywne 302 304 357reaktywne 303 304

protokoacuteDSS Protocol 245 251komunikacji mi dzy procesami 243TCPIP 245 251

przedstawicielstwo 108przegl darka internetowa 249 251przekroacutej linii obrazu 95przestrze nazw

SystemCollectionsConcurrent 187 188189 190

SystemReactiveConcurrency 335SystemReactiveLinq 316SystemReactiveWindowsThreading 346SystemThreading 14 29 181 209 401 402SystemThreadingTasks 138 161SystemWindowsShapes 119

pull-based Patrz program oparty na wyci ganiudanych

punkt synchronizacji 14Python 365

R

race condition Patrz w tek wy cigReactive Extensions Patrz Rx

planista 335 336 339ReactiveCocoa 302Representational State Transfer Patrz RESTResource Diagnostics Patrz us uga diagnostyki

zasoboacutewrozg aszanie 267rozszerzenie Patrz metoda rozszerzaj caRx 301 307 345 361

gramatyka 309

platforma 306rysowanie 346unifikacja 343warstwa Patrz warstwazarz dzanie wspoacute bie no ci 333

Rx-Cor 343Rx-Interfaces 343Rx-Linq 343Rx-PlatformServices 343Rx-Silverlight 345Rx-WPF 345Rx-Xaml 345

S

Schura iloczyn 378sekcja krytyczna 44 53 55 89 91 104 170

188 234 407 410semafor 91 92 93 104

lokalny 93serwis WCF 215silnik wyszukiwania 345 353 357Silverlight 246 404Single-Threaded Apartment Patrz STAs ownik 188 337s owo kluczowe

delegate 108lock 44 45 51 64 81 84 181 412params 143return 18volatile 64 417

spinning 188STA 124starvation Patrz w tek zag odzonystos 189 191 195

okno Patrz okno stosoacutew roacutewnoleg ychwspoacute bie ny 189

struktura CancellationToken 34subskrypcja 312 339sygna 182system

operacyjny planista 31rozproszony 277

T

tablicadeklaracja 64sortowanie 212

Task Patrz zadanie

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

434 Programowanie roacutewnoleg e i asynchroniczne w C 50

Task Parallel Library Patrz TPLtechnologia

niezarz dzana 124REST Patrz REST

thread Patrz w tekThreads Patrz okno w tkoacutewtimer 55token przerwania 148 209TPL 13 19 137 161 175 204 205 215 221

225 243 361 398 404transformata Fouriera szybka Patrz FFT

U

uk adkartezja ski lewoskr tny 122wspoacute rz dnych 115 122

us uga 245diagnostyki zasoboacutew 252identyfikacja 256identyfikator Patrz identyfikator us ugipartnerska 265 266 291port TimeoutPort 291port g oacutewny 245rozpraszanie 277stan 245synchronizacja 291tworzenie 250 284

V

Visual Studio 225 245 307 368 397 423

W

warstwaLINQ do zdarze 306 315sekwencji zdarze 306 315 320zarz dzania wspoacute bie no ci 306 334

Watch Window Patrz okno ledzenia zmiennychw tek 25 28 30 334 399

aktywny 227 229bezpiecze stwo Patrz bezpiecze stwoblokada wiruj ca 45budzenie Patrz w tek wznawianieCUDA 378czas wykonania 234dane wspoacute dzielone 40interfejsu

uprzywilejowany 339u ytkownika 95 130

kontekstdzia ania Patrz ATMsynchronizacji 128 130 132 215 218 221

obs uga zako czenia 110oflagowanie 226okno Patrz okno w tkoacutewpami lokalna 39pobieranie danych 45pomocniczy 234priorytet 35 36 56 57przerywanie dzia ania metody 110pula 25 47 48 50 54 55 155 179 185

205 401raportowanie post pu pracy 110sekcja krytyczna Patrz sekcja krytycznasynchronizacja 25 34 43 45 67 84 88 169

179 234 262 291 407 413 414 416z interfejsem u ytkownika 104za pomoc blokad 68

t a 35 56usypianie 31 78 81 188 400wstrzymanie 34 400wy cig 104 124 208 411 412 413 416wznawianie 78 81zag odzony 71 135zakleszczenie 68 135 104 124 407zamra anie 188zmienna lokalna Patrz zmienna lokalnazroacutewnoleglenie 36

wektor 394wiadomo 245 261 262

Timeout 291widok

W tki 233 239Wykorzystanie CPU 232

Widok Rdzenie 236wielow tkowo 25Windows Azure Marketplace 353Windows Communication Foundation 243Windows Forms 124 131 215 218 345 407Windows Phone 404Windows Presentation Foundation 96 114 116

122 131 132 218 219 345WinRT 397 400 402 403 404w asno

BackgroundWorkerCancellationPending 114ControlInvokeRequired 104ControlInvokeRequired 107 128EnvironmentProcessorCount 206TaskStatus 149

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

Skorowidz 435

WPF Patrz Windows Presentation Foundationwrapper Patrz opakowaniewyj tek 103 304 410

IndexOutOfRangeException 189InvalidOperationException 103 107 124OperationCanceledException 146 147 209przechwytywanie 148

wyj tki 33wyszukiwarka internetowa 345 353wzorzec projektowy 125

obserwator 305

X

XAML 116 345 355 397

Z

zadanie 137 138 334 398 399dane 140 141fabryka 152 154oflagowanie 226okno Patrz okno zada roacutewnoleg ychplanista 153 154 155 159 219 221planowanie 334priorytet 159przerywanie 145stan 149synchronizacja 179sztafeta 144

zakleszczenie Patrz w tek zakleszczeniezale no rekurencyjna 21zapytanie 302 357

czas wykonania 203LINQ Patrz LINQPLINQ Patrz PLINQprzerywanie 209wydajno 207zroacutewnoleglone 203 205 207

zintegrowane z j zykiem programowania161

zasada Pareto 13zdarzenie 245 302 304 345 Patrz te

wiadomokolekcja 304MouseMove 348sekwencja 306 315 320 334 336strumie 304

ziarno 390zmienna

globalna 40lokalna 39 59statyczna 59typu referencyjnego 44

znacznik 238 239

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę

436 Programowanie roacutewnoleg e i asynchroniczne w C 50

Kup książkę Poleć książkę