MCTS 70-536 Study Group - Threading

Post on 27-Jun-2015

703 views 2 download

description

Presented on the 1st Study Group meeting.

Transcript of MCTS 70-536 Study Group - Threading

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