Asynchroniczność w Windows 8 Jakub Binkowski. O mnie Jakub Binkowski 2008 - 2011 Lead.NET Developer.

Slides:



Advertisements
Podobne prezentacje
Java Data Objects.
Advertisements

Analiza wywołania i przebiegu przerwań w systemie Linux
tworzenie połączeń sieciowych
Java Server Faces Tomasz Nowak.
ALLEGRO PIERWSZA GRA: WYŚCIG
Java vs C# Michał Prządka Tomasz Nowak
OOPC++ - operatory1 Operatory class complex { private: double re, im; public: complex (double r, double i = 0) { re = r; im = i; } friend complex operator+
Model – View - Controler
GUI Struktury Spotkanie integracyjne Nazwa wydziału: EAIiE Nazwa katedry: Informatyka Miejsce i data prezentacji: Kraków,
Mirosław Ochodek Sponsorzy: JFace Jak jeszcze szybciej tworzyć interfejsy? ECESIS Eclipse Community Education Project An.
Testowanie oprogramowania metodą badania pokrycia kodu
Łukasz Monkiewicz.
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
Aplikacje sieciowe Obiekty typu Socket. ServerSocket ClientSocket Socket ClientSocket Socket.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Networking Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Exceptions Prezentacja.
MS SQL SERVER udział w rynku. Source: Gartner Dataquest (May 2006) Company Market Share (%) Market Share (%) Growth (%) Oracle6, ,
MS ASP.NET 2005/2006
1 Building Integration System - Training Internal | ST-IST/PRM1 | 02/2008 | © Robert Bosch GmbH All rights reserved, also regarding any disposal,
Tadeusz Janasiewicz IT Group, Tadeusz Janasiewicz, WSUS, IT Group, r.
Najpopularniejsze aplikacje ASP.NET i PHP.
Node.js – Serverside Javascript
REKURENCJA.
Krzysztof Manuszewski
Zarządzanie magazynem danych - Storage Spaces w Windows Server 2012 oraz w Windows 8 Błażej Miśkiewicz MCTMCP MCSA MCTS MCITP.
Damian Wojdan Kraków,
Wprowadzenie do Windows 8 Marcin Iwanowski. Agenda Podstawowe koncepcje Windows 8Wprowadzenie do Windows Run-timeWindows Store Zrozumiecie: W co Microsoft.
db4o Kacper Skory Marcin Talarek
Co można zwiedzić w WIELKIEJ BRYTANII Pamiętajmy o miejscach które możemy zwiedzić na przykład w WIELKIEJ BRYTANII. I też czym różni się ta wyspa od naszego.
Widzisz byłego prezydęta Clintona i jego następcę Gora? Nie... To są 2 twarze Clintona ale z innym uczesaniem. Co widzisz?
Alicja Przepióra Grupa 1015a. Tekst nieuporządkowany ZYCIORYS Urodziłam sie 9 listopada 1992 w Gorlicach. Mieszkam w Strzeszynie. Mam dwóch braci. Lubię
Wycieczka w Pieniny Fotograficzna opowieść o tym, jak zespolone siły klas I a, II h, III a i III b zdobyły 9 VI 2006 r. Trzy Korony. Prezentację przygotowała.
Systemy klastrowe inaczej klasterowe.
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
AUTOR :WOJTEK NOWIK REPORTER : PATRYK SORMAN LUK SMIS PIOTREK COLO (KOLO) MAX SOWT.
Podstawy programowania
fotografie - Marcel Cohen
ST/PRM2-EU | April 2013 | © Robert Bosch GmbH All rights reserved, also regarding any disposal, exploitation, reproduction, editing, distribution,
Nieformalne miejsca spotkań. ANKIETY Przeprowadziliśmy wśród uczniów gimnazjum ankietę na temat nieformalnych miejsc spotkań. Przedstawimy przykładowe.
ALGORYTM.
Chwila zadumy ! Moi drodzy, Wysyłam te słowa do wielu osób nie bacząc, czy ktoś jest wierzący czy nie... Dla mnie jest to przesłanie do Wszystkich......
Cz.8 Zdarzenia. Refleksja – przypomnienie Event Programowanie zdarzeniowe Do dzieła!
Krótka historia asynchroniczności w.NET Jakub Binkowski.
Wprowadzenie do Reactive eXtensions dla .NET (RX)
System Center Summit Poland Sponsorzy Złoty Sponsor Srebrni Sponsorzy.
xHTML jako rozszerzenie HTML
PHP Operacje na datach Damian Urbańczyk. Operacje na datach? Dzięki odpowiednim funkcjom PHP, możemy dokonywać operacji na datach. Funkcje date() i time()
Twoją wiarę nosimy w sobie Kres jest tak niewidzialny, jak początek. Wszechświat wyłonił się ze Słowa i do Słowa też powraca. Nadzy przychodzimy.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
KINECT – czyli z czym to się je?. Damian Zawada
Sieci komputerowe. Nowe technologie komputerowe
To śmieszne...
PolGIS jako nowoczesny system do paszportyzacji sieci
Procesy i wątki dla dociekliwych
Informacje podstawowe
Warsztaty użytkowników programu PLANS – Karwia06 Język makropoleceń JMP programu PLANS Część I mgr inż. Tomasz Zdun.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Instrukcje sterujące: W instrukcjach sterujących podejmowane są decyzje o wykonaniu tych czy innych instrukcji programu. Decyzje te podejmowane są w zależności.
Rozdział 3: Bezpieczeństwo w sieci opartej na systemie Windows 2000.
w/g Grzegorz Gadomskiego
KW2 Czy można żyć bez KW2? - Można, ale co to za życie?... [S.Toton 2001r.n.e.]
TROCHĘ HISTORII Marek Zając PO CO UŻYWAĆ OPENCL? Marek Zając.
Silverlight 4 dla Windows Phone 7
1.
Piotr Czapiewski Wydział Informatyki ZUT.  Extensible Markup Language  Język znaczników  Human-readable and machine-readable  Niezależny od platformy.
BVMS 3.0 Moduł 13: Opcje zapisu iSCSI
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Pierwsza aplikacja na Windows Phone. Dlaczego Windows Phone?
Windows 8 dla programistów Bartłomiej Zass Microsoft.
Zapis prezentacji:

Asynchroniczność w Windows 8 Jakub Binkowski

O mnie Jakub Binkowski Lead.NET Developer

Agenda Dlaczego asynchronicz- ność? Historia: APM, EAPasync i await ASP.NET MVC Windows 8 Runtime Internals i architektura

Dlaczego asynchroniczność?

public void DownloadImageAsPng(string url, string fileName) { var webclient = new WebClient(); var imageBytes = webclient.DownloadData(url); using(var imageStream = new MemoryStream(imageBytes)) { var bitmap = Bitmap.FromStream(imageStream); bitmap.Save(fileName, ImageFormat.Png); } Przykładowa metoda… Pobranie z sieci Zapis na dysk

Gdyby 1 cykl procesora = 1 sekunda: Rejestr: 1s Pamięć: 5-10s Dysk: 3 miesiące Sieć: 30 lat Ile to trwa?

Operacje obliczeniowe Wątek

Operacje I/O synchroniczne Operacja I/O Wątek Urządzenie

Różne problemy w różnych środowiskach: Aplikacje desktop (Metro, WPF, …) Aplikacje serwerowe (ASP.NET, WCF, …) Problemy

Jest jeden wątek UI Gdy jest zajęty aplikacja przestaje odpowiadać Aplikacje desktop

Oparte o pulę wątków Gdy wszystkie wątki z puli są zajęte – żądania się kolejkują Pula wątków rośnie, ale: Każdy wątek to 1MB zarezerwowanej pamięci Aplikacje serwerowe

Dla uproszczenia: 3 procesory 3 wątki w puli 2 rodzaje operacji: Tylko HTML – szybka operacja w pamięci Dostęp do zewnętrznych zasobów (DB, Web Service) - wole Przykład – aplikacja ASP.NET

HTML DB Web Service HTML CPU = 66% DB Żądania aktualnie obsługiwane Żądania aktualnie obsługiwane Kolejka żądań oczekujących Kolejka żądań oczekujących HTML

Przykład – aplikacja ASP.NET HTML DB Web Service HTML CPU = 33% DB HTML

Przykład – aplikacja ASP.NET HTML DB Web Service CPU = 0% DB HTML Żądania, które można by obsłużyć… Żądania, które można by obsłużyć…

Desktop zawieszenie się Server spadek wydajności Rozwiązanie – operacje asynchroniczne Problemy operacji synchronicznych

Operacje I/O asynchroniczne Operacja I/O Wątek 1 Urządzenie Wątek 2

Krótka historia asynchroniczności w.NET

Asynchronous Programming Model Asynchroniczność w.NET 1.1 Demo

Wg zespołu Windows Forms APM jest: zbyt skomplikowany nie pasuje do trybu design wymaga pilnowania wątków Asynchronous Programming Model

Event-base Asynchronous Programming Asynchroniczność w.NET 2.0 Demo

public void DownloadFile(string url) { try { var webClient = new WebClient(); var data = webClient.DownloadData(url); //carry on... } catch (Exception ex) { //handle error... } Problem APM i EAP…

public void DownloadFile(string url) { try { var webClient = new WebClient(); webClient.DownloadDataCompleted += DownloadFileCompleted; webClient.DownloadDataAsync(new Uri(url)); } catch (Exception ex) { //handle error } private void DownloadFileCompleted(object sender, DownloadDataCompletedEventArgs e) { if (e.Error == null) { var data = e.Result; //carry on... } else { //handle error } Problem APM i EAP…

Napisać taki kod jak synchroniczny Niech kompilator zajmie się asynchronicznością Niech debugger działa jak gdyby kod był synchroniczny A gdyby można było…

A gdyby tak można było…

public async void DownloadFile(string url) { try { var webClient = new WebClient(); var data = await webClient.DownloadDataTaskAsync( new Uri(url)); //carry on... } catch (Exception ex) { //handle error... } async!

public async Task DownloadFile(string url) { var wc = new WebClient(); var data = await wc.DownloadDataTaskAsync(/*...*/); //carry on... } Jak działa async?

async Demo

public Task DownloadFile(string url) { var wc = new WebClient(); var downloadTask = wc.DownloadDataTaskAsync(/*...*/); var continuationTask = downloadTask.ContinueWith(t => { if (t.Exception != null) throw t.Exception.InnerException; //carry on... }); return continuationTask; } Co zrobi kompilator?

public async void FireAndForget() { /*...*/ } public async Task FireAndRemember() { /*...*/ } public async Task FireAndReturn() { /*...*/ return 1; } Metody async

Fire and forget Przeznaczenie: Event handlery Kompatybilność wstecz async Task vs async void Można poczekać na zakończenie wykonania (i sprawdzić np. exception) async void Xxx()async Task Xxx()

Func > fireAndReturn = async ()=> { /**/ return 1; }; Anonimowy async? Czemu nie!

ASP.NET MVC async

public class HomeController : Controller { public ActionResult Download() { var client = new WebClient(); var data = client.DownloadData(new Uri("…")); //... return View(); } } ASP.NET MVC 3 – kontroler Potencjalnie długotrwała operacja

public class HomeController : AsyncController { public void DownloadAsync() { AsyncManager.OutstandingOperations.Increment(); var client = new WebClient(); client.DownloadDataCompleted += (s, a) => { AsyncManager.Parameters["data"] = a.Result; AsyncManager.OutstandingOperations.Decrement(); }; client.DownloadDataAsync(new Uri("…")); } public ActionResult AvatarDetailsCompleted(byte[] data) { //... return View(); } } ASP.NET MVC 3 – kontroler asynchroniczny

ASP.NET MVC 3 Kontroler synchroniczny Kontroler asynchroniczn y Demo

public class HomeController : Controller { public ActionResult Download() { var client = new WebClient(); var data = client.DownloadData(new Uri("…")); //... return View(); } } ASP.NET MVC 4 – kontroler synchroniczny (przypomnienie)

public class HomeController : AsyncController { public async Task Download() { var client = new WebClient(); var data = await client.DownloadDataTaskAsync(/*…*/); //... return View(); } } ASP.NET MVC 4 – kontroler asynchroniczny

ASP.NET MVC 4 Kontroler asynchroniczn y Demo

Windows Runtime async

Async w Windows Runtime Fundamentals Communications & Data Media Devices User Interface

Asynchroniczność w Windows Runtime Demo

Async w Windows Runtime

IAsync* a Task IAsyncAction IAsyncOperation Task

Internals, architektura

Na jakim wątku wykona się dalej kod? Demo

Czy skoro można wywołać na: Task IAsyncAction/Operation to czy można wywołać na czymś jeszcze innym? Pytanie

await – na czym można czekać? public class MyClass { public MyAwaiter GetAwaiter() { /*..*/ } } public class MyAwaiter : INotifyCompletion { public bool IsCompleted { get {/*...*/} } public void GetResult() {/*..*/} public void OnCompleted(Action continuation) {/*..*/} } var my = new MyClass(); await my; Może też być extension method Może też być extension method

Co będzie w zmiennej type? var task = Task.Run ( new Func (() => { throw new Exception(); })); try { await task; } catch (Exception ex) { string type = ex.GetType().Name; } var task = Task.Run ( new Func (() => { throw new Exception(); })); try { await task; } catch (Exception ex) { string type = ex.GetType().Name; } var task = Task.Run ( new Func (() => { throw new Exception(); })); task.ContinueWith(t => { try { var res = t.Result; } catch (Exception ex) { string type = ex.GetType().Name; } }); var task = Task.Run ( new Func (() => { throw new Exception(); })); task.ContinueWith(t => { try { var res = t.Result; } catch (Exception ex) { string type = ex.GetType().Name; } });

await a Exception Demo

private async void Button_Click_1(object sender, RoutedEventArgs e) { var wc = new WebClient(); var data = await wc.DownloadDataTaskAsync(tb.Text); //... } Czy tak piszemy aplikacje?

Wzorce, np. MVVM? Warstwy: logiki biznesowej, dostępu do danych? Co z tą architekturą?

Wpływ async na architekturę Demo

async – okiełznanie asynchroniczności W.NET – nowe metody W Windows Runtime – jedyny model Pełne wsparcie w ASP.NET, WCF Wpływ na architekturę Podsumowanie

Dziękuję za uwagę! Pytania?