Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?
-
Upload
microsoft -
Category
Technology
-
view
111 -
download
3
description
Transcript of Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?
![Page 1: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/1.jpg)
palais des congrès Paris
7, 8 et 9 février 2012
![Page 2: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/2.jpg)
Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?
Erwan Herfroy [email protected] Development Manager
Eric Vernié [email protected]://blogs.msdn.com/b/devosaure/http://blogs.msdn.com/b/devpara/@EricVernie
![Page 3: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/3.jpg)
.NET C++
Rappel sur TPLNouveautés 4.5
Asynchronisme TPL Dataflow …
Rappel sur PPLNouveautés C++
Futures/Task Continuation Algorithmes C++ AMP* …
Agenda
![Page 4: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/4.jpg)
Rappel : Visual Studio 2010
Parallel Pattern LibraryTask Parallel Library
Parallel LINQ
Managed NativeKey:
WindowsOperating System
Runtime
Programming Models
CLR ThreadPool
Task Scheduler
Resource Manager
Data Structures D
ata
Stru
ctur
es
Tools
Tooling
Parallel Debugger
Concurrency Visualizer
AsyncAgentsLibrary
Stacks
Tasks
Threads
Cores
ConcRT
Task Scheduler
Resource Manager
CPU
![Page 5: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/5.jpg)
Productivité du DéveloppementPlus simple de formuler le parallélismePermet l’utilisation de schémas éprouvésIntégration à l’environnement de développementLimite le code de “plomberie”
Performance & Exécution OptimiséeRéduction du surcoût à l’exécutionPermet l’utilisation de schémas performantMeilleure montée en charge
Exploitation de la PlateformePermet une composition efficacePermet de réduire l’utilisation des ressources processeurAmélioration de la cohérence du cachePermet d’exploiter au mieux les nouvelles fonctionnalités de Windows
Objectifs & Apports
![Page 6: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/6.jpg)
DEMO
Task Parallel Library
![Page 7: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/7.jpg)
Asynchronisme
![Page 8: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/8.jpg)
Appel synchrone avec .NET 4…
public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
![Page 9: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/9.jpg)
public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
Appel async (mais bloquant) avec .NET 4…
public Task CopyStreamToStreamAsync(Stream source, Stream destination){ return Task.Factory.StartNew(() => { byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); } });}
![Page 10: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/10.jpg)
Code async avec .NET 4…public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
public IAsyncResult BeginCopyStreamToStream( Stream source, Stream destination, AsyncCallback callback, object state){ var tcs = new TaskCompletionSource<object>(state); if (callback != null) tcs.Task.ContinueWith(_ => callback(tcs.Task)); var buffer = new byte[0x1000];
Action<IAsyncResult> readWriteLoop = null; readWriteLoop = iar => { try { for (bool isRead = iar == null; ; isRead = !isRead) { switch (isRead) { case true: iar = source.BeginRead(buffer, 0, buffer.Length, readResult => { if (readResult.CompletedSynchronously) return; readWriteLoop(readResult); }, null); if (!iar.CompletedSynchronously) return; break;
case false: int numRead = source.EndRead(iar); if (numRead == 0) { tcs.TrySetResult(null); return; } iar = destination.BeginWrite(buffer, 0, numRead, writeResult => { if (writeResult.CompletedSynchronously) return; destination.EndWrite(writeResult); readWriteLoop(null); }, null); if (!iar.CompletedSynchronously) return; destination.EndWrite(iar); break; } } } catch (Exception e) { tcs.TrySetException(e); } }; readWriteLoop(null); return tcs.Task;}
public void EndCopyStreamToStream(IAsyncResult asyncResult) { ((Task)asyncResult).Wait();}
![Page 11: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/11.jpg)
Code async avec .NET 4.5…
public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
public async Task CopyStreamToStreamAsync(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = await source.ReadAsync(buffer, 0, buffer.Length)) != 0) { await destination.WriteAsync(buffer, 0, numRead); }}
![Page 12: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/12.jpg)
Code async avec .NET 4.5…public void CopyStreamToStream(Stream source, Stream destination)
{ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
public async Task CopyStreamToStreamAsync(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = await source.ReadAsync(buffer, 0, buffer.Length)) != 0) { await destination.WriteAsync(buffer, 0, numRead); }}
![Page 13: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/13.jpg)
DEMO
async/await
![Page 14: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/14.jpg)
Task.Run
Task.Delay
Task.WhenAll / WhenAny
Task.FromResult
Task.Yield
Task.ConfigureAwait
Task.ContinueWith
Nouvelles méthodes de la classe Task supportant Async
![Page 15: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/15.jpg)
DEMO
Task WhenAll/WhenAny
![Page 16: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/16.jpg)
Modèle de programmation parallèleExemple de Pipeline
![Page 17: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/17.jpg)
System.Threading.Tasks.Dataflow.dll
Primitives de passage de messages “Des blocs” qui manipulent des données A utiliser individuellement ou liés ensemble afin de créer
un réseau
Repose sur des principes Vieux de dizaines d’années Inspirée par
Asynchronous Agents Library dans Visual C++ 2010 Le projet Axum en incubation CCR de Microsoft Robotics
TPL DataflowAperçu
![Page 18: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/18.jpg)
ActionBlock<int>Message Queue
0123
Process(0);Process(1);Process(2);Process(3);
4
Process(4);
var ab = new ActionBlock<int>(i =>{ Process(i);});
for(int i = 0; i < 5; i++){ ab.Post(i);}
TPL DataflowExemple simple Producteur/Consommateur
![Page 19: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/19.jpg)
DEMO
TPL Dataflow en Action
![Page 20: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/20.jpg)
Algorithmes parallèle parallel_for | parallel_for_each | parallel_invoke parallel_transform | parallel_reduce | parallel_sort |
parallel_buffered_sort | parallel_radixsort
Tâches task_handle | task_group | structured_task_group task<T>
then<T> | when_all<T> | when_any<T> operateurs &&, ||
task_completion_eventContainers
concurrent_queue | concurrent_vector | combinable concurrent_unordered_map | concurrent_unordered_multimap |
concurrent_unordered_set | concurrent_unordered_multisetl
Agent
PPL: VS 2010 et VS 11
![Page 21: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/21.jpg)
DEMO
Parallel Pattern Library
![Page 22: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/22.jpg)
Notion de futur task<T> t, t.get()
Notion de continuation task<T>.then()
Task_completion_event<int>
When_all/when_any
Nouveautés de la PPL
![Page 23: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/23.jpg)
Choice:
auto t = t1 || t2; // identique à when_any
Join:
auto t = t1 && t2; // identique à when_all
Syntaxe des Operateurs
![Page 24: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/24.jpg)
DEMO
Quelques nouveautés de la PPL
![Page 25: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/25.jpg)
www.buildwindows.com
Résumé : Nouveautés VS 11
Parallel Pattern LibraryTask Parallel Library
PLINQ
Managed NativeKey:
WindowsOperating System
Runtime
Programming Models
CLR ThreadPool
Task Scheduler
Resource Manager
Data Structures D
ata
Stru
ctur
es
Tools
Tooling
Parallel Debugger
Concurrency Visualizer
AsyncAgentsLibrary
Stacks
Tasks
Watch
CPU
Threads
Cores
C#/VB/F#
Async Dataflow
C++AMP
DirectX
GPU
CPU GPU
ConcRT
Task Scheduler
Resource Manager
New Updated
![Page 26: Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?](https://reader034.fdocuments.fr/reader034/viewer/2022051413/558be0d9d8b42a1d608b45e3/html5/thumbnails/26.jpg)
Chaque semaine, les DevCampsALM, Azure, Windows Phone, HTML5, OpenDatahttp://msdn.microsoft.com/fr-fr/devcamp
Téléchargement, ressources et toolkits : RdV sur MSDNhttp://msdn.microsoft.com/fr-fr/
Les offres à connaître90 jours d’essai gratuit de Windows Azure www.windowsazure.fr
Jusqu’à 35% de réduction sur Visual Studio Pro, avec l’abonnement MSDN www.visualstudio.fr
Pour aller plus loin
10 février 2012
Live Meeting
Open Data - Développer des applications riches avec le protocole Open Data
16 février 2012
Live Meeting
Azure series - Développer des applications sociales sur la plateforme Windows Azure
17 février 2012
Live Meeting
Comprendre le canvas avec Galactic et la librairie three.js
21 février 2012
Live Meeting
La production automatisée de code avec CodeFluent Entities
2 mars 2012
Live Meeting
Comprendre et mettre en oeuvre le toolkit Azure pour Windows Phone 7, iOS et Android
6 mars 2012
Live Meeting
Nuget et ALM
9 mars 2012
Live Meeting
Kinect - Bien gérer la vie de son capteur
13 mars 2012
Live Meeting
Sharepoint series - Automatisation des tests
14 mars 2012
Live Meeting
TFS Health Check - vérifier la bonne santé de votre plateforme de développement
15 mars 2012
Live Meeting
Azure series - Développer pour les téléphones, les tablettes et le cloud avec Visual Studio 2010
16 mars 2012
Live Meeting
Applications METRO design - Désossage en règle d'un template METRO javascript
20 mars 2012
Live Meeting
Retour d'expérience LightSwitch, Optimisation de l'accès aux données, Intégration Silverlight
23 mars 2012
Live Meeting
OAuth - la clé de l'utilisation des réseaux sociaux dans votre application
Prochaines sessions des Dev Camps