PROGRAMAÇÃOCONCORRENTEEM .NET 4.5JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
PROGRAMAÇÃOTALVEZ CONCORRENTEEM .NET 4.5JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
PROGRAMAÇÃOASSÍNCRONAEM .NET 4.5JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
EU PROGRAMO WEB
EU PROGRAMO WEBPOR QUE PROGRAMARASSINCRONAMENTE?
EU PROGRAMO WEBPOR QUE PROGRAMARASSINCRONAMENTE?   MENOR LATÊNCIAMAIOR RESPONSIVIDADE
WINDOWS XPWINDOWS FORMSNÃO BLOQUEIE A THREAD DA UI
WINDOWS 8    WINRTNÃO BLOQUEIE A THREAD DA UI
I/O vs CPU
I/O vs CPUI/O É MAIS CARO
I/O vs CPUI/O É MAIS LENTO
I/O vs CPUI/O É MAIS LENTO        DISCO        REDE BANCO DE DADOS
PROGRAMAÇÃOCONCORRENTE
PROGRAMAÇÃOCONCORRENTE  THREADS
PROGRAMAÇÃOCONCORRENTE  É DIFÍCIL
PROGRAMAÇÃOCONCORRENTE  É DIFÍCIL  OU NÃO
COMO NÃO FAZER:new Thread(() =>{    //código lento}).Start();
TALVEZ NÃO PROGRAMAR CONCORRENTEMENTE?
TALVEZ NÃO PROGRAMAR CONCORRENTEMENTE?       TALVEZ  ASSINCRONAMENTE
MAS ANTES,O QUE TEMOS HOJE?
ATÉ .NET 3.5BeginInvoke EndInvoke
Func<string> ler = () =>    File.ReadAllText(@"C:test.txt");var handle = ler.BeginInvoke(null, null);//qualquer outro códi...
var req = WebRequest.Create("http://google.com");var handle = req.BeginGetRequestStream(null, null);//qualquer códigovar s...
ATÉ .NET 3.5Begin[QualquerCoisa] End[QualquerCoisa]
ATÉ .NET 3.5Begin[QualquerCoisa] End[QualquerCoisa]     THREADS RACE CONDITIONS MAIS COMPLICADO
.NET 4.0PARALLEL EXTENSIONS  PLINQ (Parallel LINQ)            +TPL (Task Parallel Library)
.NET 4.0PLINQ (Parallel LINQ)
var files = new[] {"file1.txt", "file2.txt"};var contents = string.Join("", files    .AsParallel()    .Select(File.ReadAll...
.NET 4.0TPL (Task Parallel Library)
.NET 4.0TPL (Task Parallel Library)       Task<T>
var task = Task.Run(() =>    File.ReadAllText(@"C:test.txt"));//qualquer outro códigovar resultado = task.Result;
.NET 4.0TPL (Task Parallel Library)      THREADS   RACE CONDITIONS  MENOS COMPLICADO
.NET 4.5 ASYNC AWAIT
fs.readFile(test.txt, function (err, data) {    if (err) throw err;    console.log(data);});
Task.Run(() => File.ReadAllText(@"test.txt"))    .ContinueWith(x => Console.WriteLine(x.Result));
var task = Task.Run(() => File.ReadAllText(@"test.txt"));task.ContinueWith(x => Console.WriteLine(x.Result));
var task = Task.Run(() => File.ReadAllText(@"test.txt"));Console.WriteLine(await task);
static async Task<int> GoogleMaisYahoo(){    var http = new HttpClient();    var google = http.GetStringAsync("http://goog...
static Task<int> GooglePlusYahoo(){    var http = new HttpClient();    var google = http.GetStringAsync("http://google.com...
.NET 4.5        ASYNC        AWAIT    SEM THREADSSEM RACE CONDITIONSMUITO MENOS COMPLICADO
RESOLVE 92.4242% DOS   PROBLEMAS QUE THREADS RESOLVEM, APROXIMADAMENTE
private async void button1_Click(object sender, EventArgs e){    var http = new HttpClient();    page.Text = "Loading...";...
MESMA THREAD QUE CHAMOU O MÉTODO                 POTENCIALMENTE NOVA THREADprivate async void button1_Click(object sender,...
ENTÃO CONTINUAMOS   COM THREADSBLOQUEADAS EM I/O?
ENTÃO CONTINUAMOS   COM THREADSBLOQUEADAS EM I/O?       NÃO
IOCP
IOCPI/O COMPLETION PORTSFUNCIONALIDADE DO S.O.ASYNC "THREADLESS" I/O
NÃO HÁ THREADSBLOQUEADAS ESPERANDO   CADA I/O TERMINAR
NÃO HÁ THREADSBLOQUEADAS ESPERANDO   CADA I/O TERMINARHÁ UMA ÚNICA THREAD DE IO   QUE LÊ UMA FILA
MÉTODOS DA BCL QUETERMINAM COM "ASYNC",GERALMENTE USAM IOCP
MÉTODOS DA BCL QUETERMINAM COM "ASYNC",GERALMENTE USAM IOCP FileStream#ReadAsyncHttpClient#GetStringAsync    Socket#SendAs...
OBRIGADO!TWITTER.COM/JUANPLOPESGITHUB.COM/JUANPLOPES
rioinfo2012
Upcoming SlideShare
Loading in …5
×

rioinfo2012

1,019 views

Published on

PROGRAMAÇÃO ASSÍNCRONA EM .NET 4.5

Published in: Technology, News & Politics
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
1,019
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
9
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

rioinfo2012

  1. 1. PROGRAMAÇÃOCONCORRENTEEM .NET 4.5JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
  2. 2. PROGRAMAÇÃOTALVEZ CONCORRENTEEM .NET 4.5JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
  3. 3. PROGRAMAÇÃOASSÍNCRONAEM .NET 4.5JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
  4. 4. EU PROGRAMO WEB
  5. 5. EU PROGRAMO WEBPOR QUE PROGRAMARASSINCRONAMENTE?
  6. 6. EU PROGRAMO WEBPOR QUE PROGRAMARASSINCRONAMENTE? MENOR LATÊNCIAMAIOR RESPONSIVIDADE
  7. 7. WINDOWS XPWINDOWS FORMSNÃO BLOQUEIE A THREAD DA UI
  8. 8. WINDOWS 8 WINRTNÃO BLOQUEIE A THREAD DA UI
  9. 9. I/O vs CPU
  10. 10. I/O vs CPUI/O É MAIS CARO
  11. 11. I/O vs CPUI/O É MAIS LENTO
  12. 12. I/O vs CPUI/O É MAIS LENTO DISCO REDE BANCO DE DADOS
  13. 13. PROGRAMAÇÃOCONCORRENTE
  14. 14. PROGRAMAÇÃOCONCORRENTE THREADS
  15. 15. PROGRAMAÇÃOCONCORRENTE É DIFÍCIL
  16. 16. PROGRAMAÇÃOCONCORRENTE É DIFÍCIL OU NÃO
  17. 17. COMO NÃO FAZER:new Thread(() =>{ //código lento}).Start();
  18. 18. TALVEZ NÃO PROGRAMAR CONCORRENTEMENTE?
  19. 19. TALVEZ NÃO PROGRAMAR CONCORRENTEMENTE? TALVEZ ASSINCRONAMENTE
  20. 20. MAS ANTES,O QUE TEMOS HOJE?
  21. 21. ATÉ .NET 3.5BeginInvoke EndInvoke
  22. 22. Func<string> ler = () => File.ReadAllText(@"C:test.txt");var handle = ler.BeginInvoke(null, null);//qualquer outro códigovar resultado = ler.EndInvoke(handle);
  23. 23. var req = WebRequest.Create("http://google.com");var handle = req.BeginGetRequestStream(null, null);//qualquer códigovar stream = req.EndGetRequestStream(handle);
  24. 24. ATÉ .NET 3.5Begin[QualquerCoisa] End[QualquerCoisa]
  25. 25. ATÉ .NET 3.5Begin[QualquerCoisa] End[QualquerCoisa] THREADS RACE CONDITIONS MAIS COMPLICADO
  26. 26. .NET 4.0PARALLEL EXTENSIONS PLINQ (Parallel LINQ) +TPL (Task Parallel Library)
  27. 27. .NET 4.0PLINQ (Parallel LINQ)
  28. 28. var files = new[] {"file1.txt", "file2.txt"};var contents = string.Join("", files .AsParallel() .Select(File.ReadAllText) .ToArray());
  29. 29. .NET 4.0TPL (Task Parallel Library)
  30. 30. .NET 4.0TPL (Task Parallel Library) Task<T>
  31. 31. var task = Task.Run(() => File.ReadAllText(@"C:test.txt"));//qualquer outro códigovar resultado = task.Result;
  32. 32. .NET 4.0TPL (Task Parallel Library) THREADS RACE CONDITIONS MENOS COMPLICADO
  33. 33. .NET 4.5 ASYNC AWAIT
  34. 34. fs.readFile(test.txt, function (err, data) { if (err) throw err; console.log(data);});
  35. 35. Task.Run(() => File.ReadAllText(@"test.txt")) .ContinueWith(x => Console.WriteLine(x.Result));
  36. 36. var task = Task.Run(() => File.ReadAllText(@"test.txt"));task.ContinueWith(x => Console.WriteLine(x.Result));
  37. 37. var task = Task.Run(() => File.ReadAllText(@"test.txt"));Console.WriteLine(await task);
  38. 38. static async Task<int> GoogleMaisYahoo(){ var http = new HttpClient(); var google = http.GetStringAsync("http://google.com"); var yahoo = http.GetStringAsync("http://yahoo.com"); return (await google).Length + (await yahoo).Length;}static void Main(string[] args){ var task = GooglePlusYahoo(); //qualquer código Console.WriteLine(task.Result); Console.ReadLine();}
  39. 39. static Task<int> GooglePlusYahoo(){ var http = new HttpClient(); var google = http.GetStringAsync("http://google.com"); var yahoo = http.GetStringAsync("http://yahoo.com"); return Task.WhenAll(google, yahoo) .ContinueWith(x => x.Result[0].Length + x.Result[1].Length);}static void Main(string[] args){ var task = GooglePlusYahoo(); //qualquer código Console.WriteLine(task.Result); Console.ReadLine();}
  40. 40. .NET 4.5 ASYNC AWAIT SEM THREADSSEM RACE CONDITIONSMUITO MENOS COMPLICADO
  41. 41. RESOLVE 92.4242% DOS PROBLEMAS QUE THREADS RESOLVEM, APROXIMADAMENTE
  42. 42. private async void button1_Click(object sender, EventArgs e){ var http = new HttpClient(); page.Text = "Loading..."; page.Text = await http.GetStringAsync("http://google.com");}
  43. 43. MESMA THREAD QUE CHAMOU O MÉTODO POTENCIALMENTE NOVA THREADprivate async void button1_Click(object sender, EventArgs e){ var http = new HttpClient(); page.Text = "Loading..."; page.Text = await http.GetStringAsync("http://google.com");}
  44. 44. ENTÃO CONTINUAMOS COM THREADSBLOQUEADAS EM I/O?
  45. 45. ENTÃO CONTINUAMOS COM THREADSBLOQUEADAS EM I/O? NÃO
  46. 46. IOCP
  47. 47. IOCPI/O COMPLETION PORTSFUNCIONALIDADE DO S.O.ASYNC "THREADLESS" I/O
  48. 48. NÃO HÁ THREADSBLOQUEADAS ESPERANDO CADA I/O TERMINAR
  49. 49. NÃO HÁ THREADSBLOQUEADAS ESPERANDO CADA I/O TERMINARHÁ UMA ÚNICA THREAD DE IO QUE LÊ UMA FILA
  50. 50. MÉTODOS DA BCL QUETERMINAM COM "ASYNC",GERALMENTE USAM IOCP
  51. 51. MÉTODOS DA BCL QUETERMINAM COM "ASYNC",GERALMENTE USAM IOCP FileStream#ReadAsyncHttpClient#GetStringAsync Socket#SendAsync
  52. 52. OBRIGADO!TWITTER.COM/JUANPLOPESGITHUB.COM/JUANPLOPES

×