Post on 27-Jun-2015
description
MCTS 70-536 Study Group
Spotkanie 1: Threading
Agenda
• Podstawy programowanie wielowątkowego• Synchronizacja• Asynchronous Programming Model
PODSTAWY PROGRAMOWANIE WIELOWĄTKOWEGO
MCTS 70-536 Study Group / Spotkanie 1
Performance hit
Memory hit
Increased code complexity
Non-deterministic behavior
Responsiveness
Scalability
Multi-threading
Thread
Execution Context
Scheduling priority
State
Back/ForegroundCPU Affinity
Start/Sleep/Join
Per AppDomain Data Slots• [ThreadLocal]•Dynamic DataSlot
Execution Context
Compresed Stack
CPU registers
Address space
Localization
Security Settings
Transaction Settings
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
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
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
SYNCHRONIZACJAMCTS 70-536 Study Group / Spotkanie 1
CLR Memory Model
Interlocked
Monitor ReaderWriterLock
[Synchronization]
Windows Kernel Objects Model
WaitHandles
Mutex Semaphore EventWaitHandle
AutoResetEvent
ManualResetEvent
Interlocked
Thread safety for primitive operations
Non-blocking
Fast (natively supported)
Gwarantuje volatile reads/writes
Wspierane operacje:•Add•Dec/Increment•Exchange•Read
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
ReaderWriterLock
Multiple Reader/Single
Writer
Exclusive Writer Lock
Shared reader lock
Upgrading/Downgrading
support
Thread Affinity
ReaderWriterLockSlim
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
Mutex
Tylko jeden klient ma dostęp
Thread Affinity
Dużo wolniejszy od „lock”
WaitOne/ReleaseMutex
Przydatny przy zabezpieczeniu wielokrotnego uruchamiania
aplikacji
Sempahore
Określona ilość klientów ma dostęp
Thread Agnostic
WaitOne/Release
Wzorzec producent-konsument
EventWaitHandle
On/Off
Auto and Manual modes
Thread AgnosticSet/Reset
Wzorzec WorkerThread
ASYNCHRONOUS PROGRAMMING MODEL
MCTS 70-536 Study Group / Spotkanie 1
APM - agenda
• Podstawowe informacje• Trzy „Randezvous Techniques”• Wyjątki w APM• Pitfalls• SynchronizationContext
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
Randezvous Techniques
Wait-Until-Done
PollingCallBack
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
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