mcts 70-536 study group - threading

24
MCTS 70-536 Study Group Spotkanie 1: Threading

Upload: marcin-daczkowski

Post on 27-Jun-2015

701 views

Category:

Technology


2 download

DESCRIPTION

Presented on the 1st Study Group meeting.

TRANSCRIPT

Page 1: MCTS 70-536 Study Group - Threading

MCTS 70-536 Study Group

Spotkanie 1: Threading

Page 2: MCTS 70-536 Study Group - Threading

Agenda

• Podstawy programowanie wielowątkowego• Synchronizacja• Asynchronous Programming Model

Page 3: MCTS 70-536 Study Group - Threading

PODSTAWY PROGRAMOWANIE WIELOWĄTKOWEGO

MCTS 70-536 Study Group / Spotkanie 1

Page 4: MCTS 70-536 Study Group - Threading

Performance hit

Memory hit

Increased code complexity

Non-deterministic behavior

Responsiveness

Scalability

Multi-threading

Page 5: MCTS 70-536 Study Group - Threading

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

Execution Context

Compresed Stack

CPU registers

Address space

Localization

Security Settings

Transaction Settings

Page 7: MCTS 70-536 Study Group - Threading

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

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

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

SYNCHRONIZACJAMCTS 70-536 Study Group / Spotkanie 1

Page 11: MCTS 70-536 Study Group - Threading

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

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

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

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

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

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

Sempahore

Określona ilość klientów ma dostęp

Thread Agnostic

WaitOne/Release

Wzorzec producent-konsument

Page 18: MCTS 70-536 Study Group - Threading

EventWaitHandle

On/Off

Auto and Manual modes

Thread AgnosticSet/Reset

Wzorzec WorkerThread

Page 19: MCTS 70-536 Study Group - Threading

ASYNCHRONOUS PROGRAMMING MODEL

MCTS 70-536 Study Group / Spotkanie 1

Page 20: MCTS 70-536 Study Group - Threading

APM - agenda

• Podstawowe informacje• Trzy „Randezvous Techniques”• Wyjątki w APM• Pitfalls• SynchronizationContext

Page 21: MCTS 70-536 Study Group - Threading

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

Randezvous Techniques

Wait-Until-Done

PollingCallBack

Page 23: MCTS 70-536 Study Group - Threading

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

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