mcts 70-536 study group - threading
DESCRIPTION
Presented on the 1st Study Group meeting.TRANSCRIPT
![Page 1: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/1.jpg)
MCTS 70-536 Study Group
Spotkanie 1: Threading
![Page 2: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/2.jpg)
Agenda
• Podstawy programowanie wielowątkowego• Synchronizacja• Asynchronous Programming Model
![Page 3: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/3.jpg)
PODSTAWY PROGRAMOWANIE WIELOWĄTKOWEGO
MCTS 70-536 Study Group / Spotkanie 1
![Page 4: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/4.jpg)
Performance hit
Memory hit
Increased code complexity
Non-deterministic behavior
Responsiveness
Scalability
Multi-threading
![Page 5: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/5.jpg)
Thread
Execution Context
Scheduling priority
State
Back/ForegroundCPU Affinity
Start/Sleep/Join
Per AppDomain Data Slots• [ThreadLocal]•Dynamic DataSlot
![Page 6: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/6.jpg)
Execution Context
Compresed Stack
CPU registers
Address space
Localization
Security Settings
Transaction Settings
![Page 7: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/7.jpg)
Obsługa wyjątków
• Nieobsłużony wyjątek w ramach wątku kończy działanie całej aplikacji (zmiana w .NET 2.0)
• Wyjątki od w/w reguły– ThreadAbortException– AppDomainUnloadException
• Application.ThreadException – Łapie wyjątki WindowsForms pochodzące od UI– Nie łapie wyjątków worker threads
• AppDomain.UnhandledException
![Page 8: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/8.jpg)
ThreadPool
Zoptymalizowana wydajność i zużycie
pamięci
Jeden ThreadPool na process
Kolejkowanie (FIFO) akcji do
natychmiastowego wykonania
Uruchamianie akcji po określonym sygnale
Ograniczenia•Nie można anulować akcji•Domyślny priorytet•Domyślna wilokość stosu•Background•MTA•Nowe wątki co 0.5s
![Page 9: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/9.jpg)
Timer
Cykliczne wykonywanie zadań
Dedykowany wątek
Wewnętrzenie używa ThreadPool
Możliwość przestawiania
Uwaga na cykl krótszy niż czas
wykonania
Uwaga na utratę zasięgu
Trzy różne implementacje• System.Threading• System.Windows.Forms• System.Timers
![Page 10: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/10.jpg)
SYNCHRONIZACJAMCTS 70-536 Study Group / Spotkanie 1
![Page 11: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/11.jpg)
CLR Memory Model
Interlocked
Monitor ReaderWriterLock
[Synchronization]
Windows Kernel Objects Model
WaitHandles
Mutex Semaphore EventWaitHandle
AutoResetEvent
ManualResetEvent
![Page 12: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/12.jpg)
Interlocked
Thread safety for primitive operations
Non-blocking
Fast (natively supported)
Gwarantuje volatile reads/writes
Wspierane operacje:•Add•Dec/Increment•Exchange•Read
![Page 13: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/13.jpg)
Monitor
Pojedynczna blokada na wyłączność
Pooled SyncLock structure
Thread affinitiy
Can lock across AppDomain if
MarshalByRefObject
C# lock statementDeadlocks
Static class
MethodImplOption.Synchronize
d
Wait and Pulse signaling pattern
![Page 14: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/14.jpg)
ReaderWriterLock
Multiple Reader/Single
Writer
Exclusive Writer Lock
Shared reader lock
Upgrading/Downgrading
support
Thread Affinity
ReaderWriterLockSlim
![Page 15: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/15.jpg)
WaitHandle
Opakowuje natywne obiekty synchronizacji
Common signaling patterns:•WaitOne/All/Any•SignalAndWait
Common release pattenr
(Close/Dispose)
Allows cross-process synchronization
Local (unnamed) or Global (named)
Wsparcie ThreadPool dla WaitHandles
![Page 16: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/16.jpg)
Mutex
Tylko jeden klient ma dostęp
Thread Affinity
Dużo wolniejszy od „lock”
WaitOne/ReleaseMutex
Przydatny przy zabezpieczeniu wielokrotnego uruchamiania
aplikacji
![Page 17: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/17.jpg)
Sempahore
Określona ilość klientów ma dostęp
Thread Agnostic
WaitOne/Release
Wzorzec producent-konsument
![Page 18: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/18.jpg)
EventWaitHandle
On/Off
Auto and Manual modes
Thread AgnosticSet/Reset
Wzorzec WorkerThread
![Page 19: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/19.jpg)
ASYNCHRONOUS PROGRAMMING MODEL
MCTS 70-536 Study Group / Spotkanie 1
![Page 20: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/20.jpg)
APM - agenda
• Podstawowe informacje• Trzy „Randezvous Techniques”• Wyjątki w APM• Pitfalls• SynchronizationContext
![Page 21: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/21.jpg)
Podstawowe informacje o APM
Szerokie wsparcie w .NET
Głównie dla operacji ograniczonych przez
I/O
Wsparcie dla operacji
ograniczonych przez CPU
BeginXXXEndXXX
IAsyncResult
Dostęp do wyniku operacji
![Page 22: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/22.jpg)
Randezvous Techniques
Wait-Until-Done
PollingCallBack
![Page 23: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/23.jpg)
Pitfalls
EndXXX wywołane dokładnie raz
Begin/EndXXX object affinity (np. delegaty)
Brak ogólnego wsparcia dla anuowania
IAsyncResult jest typem referencyjnym
Niewydajne wywołania
asynchroniczne delegatów
Brak dostępu do UI w WindowsForms
![Page 24: MCTS 70-536 Study Group - Threading](https://reader035.vdocuments.mx/reader035/viewer/2022081515/558ec7141a28ab77628b4735/html5/thumbnails/24.jpg)
Synchronization Context
Różnice np. między WinForms i ASP.NET
Statyczna właściwość Current
Wywołanie synchroniczne Send
Wywołanie asynchroniczne Post
Brak wsparcia dla pobrania wyniku
operacji