28
Async Programming Lab Matteo Baglini Software Architect/Developer, Freelance Email: [email protected] Web: http://www.makesimple.net Blog: http://blogs.ugidotnet.org/bmatte

Asynchronous Programming Lab @ DotNetToscana

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Asynchronous Programming Lab @ DotNetToscana

Async Programming Lab

Matteo Baglini Software Architect/Developer, FreelanceEmail: [email protected]: http://www.makesimple.net Blog: http://blogs.ugidotnet.org/bmatte

Page 2: Asynchronous Programming Lab @ DotNetToscana

2

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

velocizzare le applicazioni con la programmazione

asincrona» FALS

O

Page 3: Asynchronous Programming Lab @ DotNetToscana

3

«Programmazione asincrona e

programmazione parallela sono sinonimi»

FALS

O

Page 4: Asynchronous Programming Lab @ DotNetToscana

4

Windows

Page 5: Asynchronous Programming Lab @ DotNetToscana

5

Thread

Page 6: Asynchronous Programming Lab @ DotNetToscana

6

Thread Madness

Page 7: Asynchronous Programming Lab @ DotNetToscana

7

Modern CPU

Page 8: Asynchronous Programming Lab @ DotNetToscana

Asynchronous

Page 9: Asynchronous Programming Lab @ DotNetToscana

9

Parallel

Page 10: Asynchronous Programming Lab @ DotNetToscana

CPU-Bound

Page 11: Asynchronous Programming Lab @ DotNetToscana

CLR Thread Pool - UserWorkItem

Worker Thread 1

Worker Thread N

Program Thread

GlobalQueue(FIFO)

Work1Work2

ThreadPool

Page 12: Asynchronous Programming Lab @ DotNetToscana

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

Page 13: Asynchronous Programming Lab @ DotNetToscana

I/O-Bound

Page 14: Asynchronous Programming Lab @ DotNetToscana

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!

Page 15: Asynchronous Programming Lab @ DotNetToscana

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!

Page 16: Asynchronous Programming Lab @ DotNetToscana

16

App Threading Models

Page 17: Asynchronous Programming Lab @ DotNetToscana

17

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

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

} else {

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

}}

Message Loop

Page 18: Asynchronous Programming Lab @ DotNetToscana

18

Parallel

Page 19: Asynchronous Programming Lab @ DotNetToscana

19

Async/Await

Page 20: Asynchronous Programming Lab @ DotNetToscana

20

Coroutine

Page 21: Asynchronous Programming Lab @ DotNetToscana

21

WinRT

Page 22: Asynchronous Programming Lab @ DotNetToscana

22

Page 23: Asynchronous Programming Lab @ DotNetToscana

23

Async WinRT API

Page 24: Asynchronous Programming Lab @ DotNetToscana

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…

Page 25: Asynchronous Programming Lab @ DotNetToscana

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

Page 26: Asynchronous Programming Lab @ DotNetToscana

Libri

Page 28: Asynchronous Programming Lab @ DotNetToscana

Async Rocks!