Asynchronous Programming Lab @ DotNetToscana

Post on 10-May-2015

271 views 1 download

Tags:

description

Slide utilizzate durante il DotNetToscana - Asynchronous Programming Lab (http://www.dotnettoscana.org/asynchronous-programming-lab.aspx)

Transcript of Asynchronous Programming Lab @ DotNetToscana

Async Programming Lab

Matteo Baglini Software Architect/Developer, FreelanceEmail: matteo.baglini@gmail.comWeb: http://www.makesimple.net Blog: http://blogs.ugidotnet.org/bmatte

2

«.NET: applicazioni veloci come la luce. Scopri come

velocizzare le applicazioni con la programmazione

asincrona» FALS

O

3

«Programmazione asincrona e

programmazione parallela sono sinonimi»

FALS

O

4

Windows

5

Thread

6

Thread Madness

7

Modern CPU

Asynchronous

9

Parallel

CPU-Bound

CLR Thread Pool - UserWorkItem

Worker Thread 1

Worker Thread N

Program Thread

GlobalQueue(FIFO)

Work1Work2

ThreadPool

CLR Thread Pool - Tasks

Worker Thread 1

Worker Thread N

Program Thread

GlobalQueue(FIFO)

LocalQueue

1(LIFO)

LocalQueue

N(LIFO)

Task 1Task 2Task 3

Task 5Task 4Task 6

ThreadPool

I/O-Bound

14

WindowsUser-mode

WindowsKernel-mode

.NET / CLR

Synchronous I/Ovar readed = fileStream.Read(buff, 0, buff.Length);

ReadFile(hFile, Buff, BUFFSIZE-1, &dwReaded, NULL);

Windows I/O Subsystem

Thread block, waits for I/O completion.

Hardward does I/O.No threads involved!

15

WindowsUser-mode

WindowsKernel-mode

.NET / CLR

AsynchronousI/OfileStream.BeginRead(buff, 0, buff.Length, cb, null);

ReadFile(hFile, Buff, BUFFSIZE-1, &dwReaded, NULL);

Windows I/O Subsystem

void EndReadCb(IAsyncResult asyncResult) {…}

I/O Completion Ports

ThreadPoolHardward does I/O. No threads involved!

16

App Threading Models

17

while ( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) {

if (bRet == -1) { // handle error / exit

} else {

TranslateMessage(&msg); DispatchMessage(&msg);

}}

Message Loop

18

Parallel

19

Async/Await

20

Coroutine

21

WinRT

22

23

Async WinRT API

24

• Principio:• Non bloccare i Thread.

• Pattern:• Operazioni I/O-bound:

conviene sempre effettuarle in asincrono.

• Operazioni CPU-bound: dipende dal contesto e dal costo (computazionale).

In chiusura…

25

Async Programming Model Soup

ModelPrimary

UseSecondary

Use

Parent/

Child

Progress

Cancel Wait Timeou

t

Return/Exceptio

n

QueueWorkItem

CPU Sync I/O No No No No No No

APM I/OCPU via BeginInvoke

No No No Si No Si

EAP I/OCPU via BackgroundWorker

No Alcuni Alcuni No No Si

TAP CPUSync I/O orFromAsync

Si NoSi, via Cooperative Cancellation

Si Si Si

Timer CPU Sync I/O No NoSi, viaDispose

No Si No

Libri

Async Rocks!