Modern Concurrency Abstractions for C#

Relaterede dokumenter
Real-time programming safety in Java and Ada

A Profile for Safety Critical Java

Klasser og objekter. (Afsnit i manualen)

Singleton pattern i C#

Composable Memory Transactions

SWC Elementer i klassedefinition

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Software Construction 1 semester (SWC) Spørgsmål 1

Singleton pattern i Java

Programming Language Design and Analysis motivated by Hardware Evolution

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11

SWC eksamens-spørgsmål. Oversigt

Forelæsning Uge 2 Torsdag

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Det er muligt at chekce følgende opg. i CodeJudge: og

Forelæsning Uge 2 Mandag

Forelæsning Uge 3 Torsdag

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 3 Torsdag

Ugeseddel 4 1. marts - 8. marts

Forelæsning Uge 2 Mandag

Dag 10 Flertrådet programmering

OOP e uge kursusgang: Samtidighed (II) Safety = sikkerhed. Safety

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Programmering i C. Lektion september 2009

Virkefeltsregler i Java

Linguistic support for unit testing

Parallelle algoritmer

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Programmering for begyndere Lektion 2. Opsamling mm

Vejledende løsninger

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Forelæsning Uge 5 Mandag

Koordinering. dopsys

Tredjepart webservices

Udvikling af DOTNET applikationer til MicroStation i C#

Planen for idag. Synkroniseringsmekanismer. Krav til løsning. Kritiske regioner. Bagerens algoritme. Kritisk region via delt lager.

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni jun 2011 MapBasic &.

DM507 Algoritmer og datastrukturer

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Objektorienteret Programmering

Introduktion Indtastning Funktioner Scripts Optimering. Matlab

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Vejledning til listings-pakken

Online kursus: Programming with ANSI C

Kursus navn: Indledende programmering Kursus nr

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

Hvad er Objekter - Programmering

Fundamentale sprogbegreber

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#.

Forelæsning Uge 2 Mandag

Programmering og Problemløsning, 2017

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Anvendelse af metoder - Programmering

Forelæsning Uge 6 Mandag

Exceptions i Delphi. Try except

Andreas Nordbek & Kristoffer Skude Jensen. DMX Styring Side 1 af 15

ODIN-webservice ændringer release 2010 v2.0

Undtagelseshåndtering i C#

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank

Lektion 6. Grundlæggende programmering i VR

Test af It-komponent

Hvilket sprog er hurtigst

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Forelæsning Uge 5 Mandag

Python programmering. Per Tøfting. MacFest

Databaseadgang fra Java

Common Language Runtime. Multithreading

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 2 Mandag

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Introduction til.net remoting i VB.NET

Programmering i C. Lektion oktober 2008

Plugin-arkitektur med.net

Tree klassen fra sidste forelæsning

Specifikation Abstrakt OO OS-API Rev Specifikation. Abstrakt, objektorienteret operativsystem-api

Skriftlig eksamen i Datalogi

Design af genbrugeligt objektorienteret software

Virksomhedspræsentation for IDA

BRP Kursusintroduktion og Java-oversigt

Tech College Aalborg. HomePort. Projekt Smart Zenior Home Guide til udvikling af nye adaptere til HomePort

Projekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj Indholdsfortegnelse

DANMARKS TEKNISKE UNIVERSITET

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

Introduktion til OO* og UML

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Kursusarbejde 2 Grundlæggende Programmering

Forelæsning Uge 3 Mandag

Processer og koordinering. dopsys 1

Rekursion og dynamisk programmering

Skriftlig eksamen i Datalogi

Dag 10 Flertrådet programmering

Transkript:

Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007

Motivation for concurrency Forbedring af concurrency Baggrundsinformation Forfatterne Nick Benton, Luca Cardelli, og Cédric Fournet PhD i computer science Microsoft Research i Cambridge, UK Programming Principles and Tools gruppen 2/22

Motivation for concurrency Forbedring af concurrency Motivation for concurrency Concurrency har stor indflydelse på Opførelsen af programmet Selv assignments er ikke atomare Performance af programmet 3/22

Motivation for concurrency Forbedring af concurrency Motivation for concurrency Concurrent programmer er svære at: Designe Skrive Forstå Debugge Optimere 4/22

Motivation for concurrency Forbedring af concurrency Concurrency som en del af sproget Concurency er stadig ikke en del af mange sprog Er en samling af eksterne libraries De er ofte dårligt specificeret Hvis concurrency er en del af sproget: Kompileren kan analysere koden Producere bedre kode Kan advare programmøren om problemer 5/22

Motivation for concurrency Forbedring af concurrency Concurrency som en del af sproget Concurency er stadig ikke en del af mange sprog Er en samling af eksterne libraries De er ofte dårligt specificeret Hvis concurrency er en del af sproget: Kompileren kan analysere koden Producere bedre kode Kan advare programmøren om problemer 5/22

Motivation for concurrency Forbedring af concurrency Forbedring af concurrency Hvordan kan vi forbedre det? Monitors er blevet mere udbredt Svarer ca. til at tage lock på objekter ved metode kald Kommunikationen er blevet mere asynkron Skal håndtere asynkrone events: Uden nødvendigvis at blokere clienter i lange perioder Uden at resultere i deadlocks 6/22

Motivation for concurrency Forbedring af concurrency Polyphonic C# Abstraktion for asynkron programmering Høj niveau fra programmørens synspunkt Tilbyde lav niveau optimeringer fra kompileres synspunkt En udvidelse til C# 7/22

Oversigt Introduktion Motivation for concurrency Forbedring af concurrency 1 Introduktion 2 3 4 5 8/22

Asynkrone metoder Chords Eksempel Ændringer til C# Asynkrone metoder Asynkrone metoder Returnerer stort set med det samme Returnerer aldrig et resultat, eller kaster exception Erklæres med async i stedet for void Svarer til at sende en besked eller et event ref og out parametre må ikke bruges async postevent(eventinfo data){ //large method body 9/22

Asynkrone metoder Chords Eksempel Ændringer til C# Chords Chords Også kaldet synchonization pattern eller join pattern Metode deklarationer adskilt af & Højest en synkroniseret metode, resten skal være asynkrone Metode kroppen bliver først eksekveret når alle metoderne i headeren er kaldt 10/22

En simpel buffer Introduktion Asynkrone metoder Chords Eksempel Ændringer til C# class Buffer { string get() & async put(string s) { return s; 11/22

En simpel buffer Introduktion Asynkrone metoder Chords Eksempel Ændringer til C# class Buffer { string get() & async put(string s) { return s; An almindelig (synkroniseret) metode uden argumenter, returnerer en streng 11/22

Asynkrone metoder Chords Eksempel Ændringer til C# En simpel buffer class Buffer { string get() & async put(string s) { return s; An almindelig (synkroniseret) metode uden argumenter, returnerer en streng An asynkron metode, med en streng som argument 11/22

Asynkrone metoder Chords Eksempel Ændringer til C# En simpel buffer class Buffer { string get() & async put(string s) { return s; An almindelig (synkroniseret) metode uden argumenter, returnerer en streng An asynkron metode, med en streng som argument Bliver samlet i en chord 11/22

Asynkrone metoder Chords Eksempel Ændringer til C# En simpel buffer class Buffer { string get() & async put(string s) { return s; Kald til put() returnerer med det samme Kald til get() blokerer indtil/medmindre der er en tilsvarende put() Argumentet til put() returneres til den der kalder get() Det er uspecificeret hvilke par af put() og get() der bliver matched 12/22

Asynkrone metoder Chords Eksempel Ændringer til C# En simpel buffer class Buffer { string get() & async put(string s) { return s; Der laves ikke nye tråde Det er thread-safe Altid den synkroniserede metode der returnerer resultatet Kun en synkroniseret metode 13/22

Syntax ændringer Introduktion Asynkrone metoder Chords Eksempel Ændringer til C# return type ::= type void async. method-declaration erstattes med chord-declaration chord declaration ::= method header [& method header] body method header ::= attributes modifiers return type member name(formals). 14/22

Polyphonic C# C# Performance Producer and consumer eksempel i Polyphonic 15/22 public class PBB : Buffer { public PBB(int capacity) { free(capacity); public void Put(string s) & async free(int c){ if (c == 1) {full(); else {free(c 1) p(s); public string Get() & async p(string s) & async full(){ free(1); return s; public string Get() & async p(string s) & async free(int c){ free(c+1); return s;

Polyphonic C# C# Performance Producer and consumer eksempel i C# 16/22 public class LBB : Buffer { private Queue q = new Queue(); private int capacity; public LBB(int capacity) { this.capacity = capacity; public void Put(string s) { lock(this) { while (q.count == capacity) { Monitor.Wait(this); q.enqueue(s); Monitor.PulseAll(this); public string Get() { lock(this) { while (q.count == 0) { Monitor.Wait(this); string s = (string)(q.dequeue()); Monitor.PulseAll(this); return s;

Performance sammenligning Polyphonic C# C# Performance Bounded buffer size = 100 Operations per second (thousands) Single-processor Benchmark polyphonic Standard C# 1 producer, 1 consumer 682 115 2 producers, 2 consumers 423 118 Dual-processor Benchmark polyphonic Standard C# 1 producer, 1 consumer 288 250 2 producers, 2 consumers 125 42 17/22

En simpel Cell klasse Introduktion Cell klasse Reader Writer 18/22 public class OneCell { public OneCell() { empty(); public void Put(object o) & private async empty() { contains(o); public object Get() & private async contains(object o) { empty(); return o;

Cell klasse Reader Writer Reader Writer eksempel class ReaderWriter { ReaderWriter() {idle(); public void Shared() & async idle() {s(1); public void Shared() & async s(int n) {s(n + 1); public void ReleaseShared() & async s(int n) { if (n == 1) idle(); else s(n 1); public void Exclusive() & async idle() { public void ReleaseExclusive() { idle(); Forskellige tilstande idle() s(1) s(2) s(3)... 19/22

Forbedringer til concurrency? Polyphonic C# s bidrag til programmerings sprog? Inddrager tråd programmering som en central del af sproget Gør det lettere at programmere trådet Ideerne er senere blevet viderført i Cω C ω er et research programmerings sprog hos microsoft 20/22

Min vurdering af artiklen Gode ting Masser af kode eksempler En anderledes måde at kode trådet Dårlige ting Savner nogle figurer Først sammenligninger med standard tilsidst Hvorfor er det bedre/nemmere? Generelt mangler der motivation i kode eksemplerne 21/22

Min vurdering af artiklen Gode ting Masser af kode eksempler En anderledes måde at kode trådet Dårlige ting Savner nogle figurer Først sammenligninger med standard tilsidst Hvorfor er det bedre/nemmere? Generelt mangler der motivation i kode eksemplerne 21/22

Tak for jeres opmærksomhed Spørgsmål? 22/22