Post on 27-Feb-2019
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ę