Tendências Futuras: Automação baseada em robótica para fabricação, montagem e inspeção
rioinfo2012
-
Upload
juan-lopes -
Category
Technology
-
view
751 -
download
0
description
Transcript of rioinfo2012
PROGRAMAÇÃO CONCORRENTE EM .NET 4.5
JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
PROGRAMAÇÃO TALVEZ CONCORRENTE EM .NET 4.5
JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
PROGRAMAÇÃO ASSÍNCRONA EM .NET 4.5
JUAN LOPEStwitter.com/juanplopesgithub.com/juanplopes
EU PROGRAMO WEB
EU PROGRAMO WEB
POR QUE PROGRAMAR ASSINCRONAMENTE?
EU PROGRAMO WEB
POR QUE PROGRAMAR ASSINCRONAMENTE?
MENOR LATÊNCIAMAIOR RESPONSIVIDADE
WINDOWS XPWINDOWS FORMS
NÃO BLOQUEIE A THREAD DA UI
WINDOWS 8WINRT
NÃO BLOQUEIE A THREAD DA UI
I/O vs CPU
I/O vs CPUI/O É MAIS CARO
I/O vs CPU
I/O É MAIS LENTO
I/O vs CPU
I/O É MAIS LENTODISCOREDE
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.5BeginInvokeEndInvoke
Func<string> ler = () => File.ReadAllText(@"C:\test.txt");
var handle = ler.BeginInvoke(null, null);
//qualquer outro código
var resultado = ler.EndInvoke(handle);
var req = WebRequest.Create("http://google.com");var handle = req.BeginGetRequestStream(null, null);
//qualquer código
var stream = req.EndGetRequestStream(handle);
ATÉ .NET 3.5Begin[QualquerCoisa]End[QualquerCoisa]
ATÉ .NET 3.5Begin[QualquerCoisa]End[QualquerCoisa]
THREADSRACE CONDITIONSMAIS 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.ReadAllText) .ToArray());
.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ódigo
var resultado = task.Result;
.NET 4.0TPL (Task Parallel Library)
THREADSRACE CONDITIONS
MENOS COMPLICADO
.NET 4.5ASYNCAWAIT
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://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();}
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();}
.NET 4.5ASYNCAWAIT
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..."; page.Text = await http.GetStringAsync("http://google.com");}
private async void button1_Click(object sender, EventArgs e){ var http = new HttpClient(); page.Text = "Loading..."; page.Text = await http.GetStringAsync("http://google.com");}
MESMA THREAD QUE CHAMOU O MÉTODO
POTENCIALMENTE NOVA THREAD
ENTÃO CONTINUAMOS COM THREADS
BLOQUEADAS EM I/O?
ENTÃO CONTINUAMOS COM THREADS
BLOQUEADAS EM I/O?
NÃO
IOCP
IOCPI/O COMPLETION PORTS
FUNCIONALIDADE DO S.O.ASYNC "THREADLESS" I/O
NÃO HÁ THREADS BLOQUEADAS ESPERANDO
CADA I/O TERMINAR
NÃO HÁ THREADS BLOQUEADAS ESPERANDO
CADA I/O TERMINAR
HÁ UMA ÚNICA THREAD DE IOQUE LÊ UMA FILA
MÉTODOS DA BCL QUE TERMINAM COM "ASYNC", GERALMENTE USAM IOCP
MÉTODOS DA BCL QUE TERMINAM COM "ASYNC", GERALMENTE USAM IOCP
FileStream#ReadAsyncHttpClient#GetStringAsync
Socket#SendAsync
OBRIGADO!
TWITTER.COM/JUANPLOPESGITHUB.COM/JUANPLOPES