Multithreading in C#.NET

Größe: px
Ab Seite anzeigen:

Download "Multithreading in C#.NET"

Transkript

1 Multithreading in C#.NET Proseminar Objektorientiertes Programmieren mit.net und C# Holger Stöcker 19. Dezember 2010

2 Inhaltsverzeichnis 1 Einführung 3 2 Grundlagen Was ist Multithreading? Was bietet der Einsatz von Multithreading? Was ist ein Thread? Threadzustände 4 4 Die Thread -Klasse in C#.NET 5 5 Synchronisation von Threads Beispiel eines unsychronisierten Programmes Synchronisation mit Monitor oder lock-statement Synchronisation mit ReaderWriterLockSlim Synchronisation mit MethodImpl-Attribut Der Einsatz von Threadpools und BackgroundWorker-Threads Threadpools BackgroundWorker-Threads Programmierbeispiel: Simulierter Mailserver Die SingleThread-Variante Die MultiThread-Variante Konkreter Vergleich der beiden Varianten Abschließende Zusammenfassung 16 9 Anhang Quellcode und Binärdateien des Mailserver-Beispiels Literaturverzeichnis Abbildungsverzeichnis

3 1 Einführung Wenn Sie sich heute einen neuen, modernen PC zulegen, enthält dieser sehr wahrscheinlich einen Mehrkernprozessor. Dieser ist in der Lage gleichzeitig auf jedem Kern ein eigenes Programm, häufig auch Prozess genannt, auszuführen. Was für uns heute als Selbstverständlichkeit gilt, war jedoch nicht immer so. Zu Zeiten von 16 bit Betriebssystemen wie MS-DOS [1], konnte immer nur ein Programm sequentiell ausgeführt werden. Diese Form der Prozessabarbeitung hatte erhebliche Nachteile, denn sobald sich ein einzelner Prozess aufhängte, lag der gesamte PC lahm. In dieser Seminararbeit möchte ich eine grundsätzliche Einführung in die Konzepte des Multithreadings machen. Dabei liegt der Schwerpunkt darauf, wie dieses Konzept ganz konkret in der Programmiersprache C#.NET umgesetzt werden kann. 2 Grundlagen 2.1 Was ist Multithreading? Oftmals werden die zwei Begriffe Multithreading und Multitasking nicht klar voneinander abgegrenzt. Multitasking bedeutet, dass mehrere Anwendungen Parallel ausgeführt werden können. Auf einem Prozessorkern können Tasks immer nur sequentiell ausgeführt werden, also immer nur ein Task gleichzeitig. Jedoch durch schnelles Wechseln der aktiven Anwendung auf dem Kern entsteht eine Scheinparallelität. Multithreading bedeutet, dass mehrere Threads innerhalb eines Prozesses parallel ausgeführt werden können, damit ein Prozess mehrere Dinge gleichzeitig ausführen kann. 2.2 Was bietet der Einsatz von Multithreading? Multithreading bringt an vielen Stellen Performance-Vorteile, denn in der Praxis gibt es sehr oft Threads, die z.b. auf das Beenden einer Methode oder auf andere Dinge warten müssen. In diesen Wartezeiten können nun problemlos andere Threads auf der CPU arbeiten, damit diese möglichst effektiv ausgelastet werden kann. Für manche Anwendungen ist es sogar erforderlich, dass mehrere Threads eingesetzt werden. In einer Applikation, in der es eine grafische Oberfläche gibt, kann jede Interaktion, die der Benutzer durchführt (z.b. mit der Maus auf eine Schaltfläche klicken) durch einen oder mehrere zusätzliche Threads durgeführt werden. Ein anderer möglicher Fall ist z.b. ein Mailserver. Würde dieser nur aus einem einzigen Thread bestehen, könnte er gleichzeitig immer nur eine Versende- oder Empfangstransaktion durchführen. Kommt es bei einer Transaktion zu einer Verzögerung, oder zu einem Fehler, müssen alle anderen s so lange warten, bis die erste tatsächlich versendet, empfangen oder der Fehler behoben wurde. Um dieses Problem zu umgehen, kann für jede zu versendende oder zu empfangende ein eigener Thread 3

4 erstellt werden. Verzögert sich dabei ein Transaktionsvorgang (z.b. aufgrund einer langsamen Netzwerkanbindung des Remot servers), kann während der Wartezeit einfach ein anderer Thread auf der CPU arbeiten und seine Aufgaben erledigen. In Kapitel 7 wird ein konkretes Code-Beispiel eines simulierten Mailservers vorgestellt, um dieses Problem und deren Lösung zu verdeutlichen. Der Einsatz von mehreren Threads innerhalb eines Prozesses bringt aber auch Probleme und Risiken mit sich. In der Praxis besteht sehr häufig die Anforderung, dass mehrere Threads gleichzeitig auf ein und dieselbe Ressource (z.b. ein Objekt) zugreifen möchten. Dazu müssen die verschiedenen Threads synchronisiert werden. Wie oben bereits erwähnt, kann auf einem Prozessorkern stets nur ein Thread ausgeführt werden. Wird ein Thread durch das Prinzip des Timesharings an einer Stelle unterbrochen, an der er z.b. den Wert einer Ressource ändern möchte, so kann es zu unerwarteten Ergebnissen kommen, wenn als nächstes ein anderer Thread die selbe Ressource verwenden möchte. Was sich genau hinter diesem Phänomen der Threadunsicherheit verbrigt und wie man dies verhindern kann, wird in Kapitel 5 näher erläutert. 2.3 Was ist ein Thread? In den vorhergehenden Kapiteln taucht des Öfteren der Begriff Thread auf. Doch was verbirgt sich eigentlich dahinter? Als Thread wird ein Ausführungsstrang oder eine Ausführungsreihenfolge innerhalb eines Prozesses bezeichnet. Jeder Thread bekommt während seiner Initialisierungsphase einen eigenen, unabhängigen Stapel (Stack) im Arbeitsspeicher zugewiesen [2]. Threads besitzen bestimmte Eigenschaften, wie z.b. Zustände. 3 Threadzustände Jeder Thread, der erzeugt wird, befindet sich immer in einem bestimmten Zustand. Die folgende Grafik soll einen kurzen Überblick sowie die Zusammenhänge der verschiedenen Threadzustände geben. 4

5 Abbildung 1: Die verschiedenen Threadzustände im Überblick In der folgenden Auflistung sind die einzelnen Zustände nochmals etwas detaillierter beschrieben: Ready: Ausführungsbereit. Standby: Nächster Thread der ausgeführt werden soll. Running: Thread, der gerade aktiv ist. Waiting: Thread, der (meist auf eine I/O-Ressource) wartet. Transition: Ausführungsbereit, aber Kernel Stack des Threads ist nicht im Speicher verfügbar ist. Terminated: Thread, der seine Arbeit beendet hat. Initialized: Zustand, während ein Thread erzeugt wird. 4 Die Thread -Klasse in C#.NET In.NET werden alle Threads durch die Klasse Thread im Namensraum System.Threading repräsentiert. Das folgende Codebeispiel zeigt, wie ganz einfach ein neuer Thread erzeugt werden kann: 5

6 1 using System.Threading; 2 3 class Program 4 { 5 private static void Main(string[] args) 6 { 7 Thread thread1 = new Thread(new ThreadStart(Execute)); 8 thread1.start(); 9 10 Thread thread2 = new Thread(new ParameterizedThreadStart( Execute_Param)); 11 thread1.start(new Object()); 12 } public void Execute() 15 { 16 // DO SOMETHING } public void Execute_Param(Object param) 20 { 21 // DO SOMETHING } 23 } Der Konstruktor von Thread erwartet als Parameter ein ThreadStart-Objekt, bzw. ein Objekt vom Typ ParameterizedThreadStart. Diesem Objekt wird dann als Parameter der Name einer Methode übergeben, welche der Thread ausführen soll. Mit der Start()-Methode wird der Thread schließlich tatsächlich gestartet. In diesem Moment wird der neue Thread erzeugt und er reiht sich in die Schlange der Threads ein, die darauf warten vom Prozesssteuerprogramm (Scheduler) Prozessorzeit zugewiesen zu bekommen. Im Falle eines parametrisierten Thread-Starts wird dem ParameterizedThreadStart-Objekt als Parameter der Name einer Methode übergeben, welche der Thread ausführen soll. Der Tatsächliche Parameter wird jedoch an die Start()-Methode übergeben. Er muss vom Typ Object sein. Neben Start() gibt es noch einige andere Methoden, die auf einem Objekt der Klasse Thread aufgerufen werden können. Einige von ihnen sind in der Praxis relevanter als andere. Ein besonderes Augenmerk möchte ich jedoch auf die Methode Sleep() richten. Als Parameter wird ein Integer übergeben, der die Anzahl an Millisekunden angibt, die der Thread schlafen gelegt werden soll. Ein schlafender Thread wird in den Zustand Waiting versetzt. Ist die Wartezeit verstrichen so reiht er sich wieder in die Warteschlange ein. Im Folgenden befindet sich eine Übersicht über die wichtigsten Methoden, die auf einem Objekt der Klasse Thread aufgerufen werden können: Start(): Startet einen Thread. Start(Object obj): Parametrisierter Start eines Threads. Sleep(int milliseconds): Legt Thread für eine bestimmte Zeit schlafen. 6

7 Sleep(Timeout.Infinite): Legt Thread auf unbestimmte Zeit schlafen. Interrupt(): Weckt schlafenden Thread auf. Suspend() : Hält einen anderen Thread an. Resume(): Setzt angehaltenen Thread fort. Abort(): Zwingt anderen Thread zum Beenden. Join(): Blockiert den aufrufenden Thread, bis der andere Thread terminiert ist. Objekte der Klasse Thread besitzen auch bestimmte Attribute. Die vier wichtigsten davon sind Priority, isbackground, isalive und ThreadState. Mit diesen lassen sich die Werte der Priorität, des Threadtyps (Hinter- oder Vordergrungthread), des Ausführungsstatus und des aktuellen Threadzustandes auslesen, bzw. teilweise auch verändern. 5 Synchronisation von Threads Jedes moderne Betriebssystem nutzt das Prinzip des Timesharings. Dies bedeutet, dass jeder Thread eine bestimmte Rechenzeit auf der CPU zugeteilt bekommt. Nach Ablauf dieser Zeit wird der Thread unterbrochen, ein anderer Thread kommt zur Ausführung und die unterbrochene Thread reiht sich wieder in die Warteschlange ein, um irgendwann seine Ausführung fortzusetzen. Wird nun ein Thread genau dann unterbrochen, während er eine gemeinsam genutzte Ressource (z.b. ein Objekt) verändern möchte, seinen Vorgang jedoch noch nicht abgeschlossen hat und nun ein anderer Thread ebenfalls auf die Ressource zugreifen möchte, kann es passieren, dass das Objekt in einem ungültigen Zustand hinterlassen wird. Eine Folge von Operationen, die notwendig ist, um einen Bearbeitungsvorgang einer Ressource vollständig abzuschließen, heißt atomare Einheit oder kritischer Bereich. Um sicherzustellen, dass eine solche atomare Einheit immer erst komplett ausgeführt wird, bevor ein anderer Thread wieder auf die gemeinsam genutzte Ressource zugreifen kann, gibt es unterschiedliche Möglichkeiten in.net. Einige davon sind in den folgenden Unterkapiteln anhand von kleinen Code-Beispielen genauer erklärt. 7

8 5.1 Beispiel eines unsychronisierten Programmes Die Grundproblematik, die durch den Zugriff mehrerer Threads auf ein und dieselbe Ressource entsteht, wird durch das folgende Beispiel erläutert: 1 class Program { 2 private static void Main(string[] args) { 3 ExecClass obj = new ExecClass(); 4 Thread thread1 = new Thread(new ThreadStart(obj.Execute)); 5 Thread thread2 = new Thread(new ThreadStart(obj.Execute)); 6 thread1.start(); 7 thread2.start(); 8 } 9 } Bei Programmstart wird ein neues Objekt der Klasse ExecClass erzeugt. Zusätzlich werden zwei Threads erstellt, jedem der beiden Threads wird die Methode Execute als Parameter übergeben und beide Threads werden gestartet. Die Klasse Program wird auch in allen anderen Unterkapiteln des Kapitels 5 als gegeben vorausgesetzt. 1 class ExecClass { 2 // global ressource 3 private int counter = 0; 4 5 public void Execute() { 6 for (int i = 0; i < 10; i++) { 7 counter++; 8 Console.WriteLine(counter); 9 } 10 } 11 } Die Klasse ExecClass enthält zum einen eine private Variable counter, die als gemeinsam genutzte Ressource verwendet werden soll und zum anderen die Methode Execute, die die counter-variable 10-mal inkrementiert und jeweils dessen Wert ausgibt. Nun testen wir unser Programm und erhalten folgende oder eine ähnliche Ausgabe: Wir erkennen eindeutig, dass unser Programm nicht die erwartete Ausgabe der aufsteigend sortierten Zahlen von eins bis zehn zurückliefert, da die counter-variable ja Schritt für Schritt inkrementiert wird und direkt im Anschluss ausgegeben wird. Der in der Ausgabe ersichtlich gewordene Fehler ist dadurch entstanden, dass jeder Thread nur eine bestimmte 8

9 Zeit auf der CPU rechnen darf. Ist die Zeit abgelaufen, wird er unterbrochen und er muss sich wieder in die Warteschleife einordnen um später seine Ausführung fortzusetzen. Wird in unserem Beispiel ein Thread nun genau in dem Moment unterbrochen, in dem die Variable zwar bereits erhöht, der Wert jedoch noch nicht auf die Konsole geschrieben wurde, kommt es zu solchen Fehlern, wie sie in unserer Ausgabe zu sehen sind. 5.2 Synchronisation mit Monitor oder lock-statement Damit der eben beschriebene Fehler vermieden, bzw. verhindert wird, müssen alle Methoden, die die gemeinsam genutzte Ressource verändern wollen synchronisiert werden. Das bedeutet, solange sich ein Thread in einem Bearbeitungsprozess der Ressource befindet, müssen alle anderen Threads warten, bis der Vorgang angeschlossen ist und die Ressource wieder frei ist. Das folgende Beispiel zeigt den Einsatz der Monitor-Klasse als erste Möglichkeit in.net, mit der eine solche Synchronisation erreicht werden kann: 1 class ExecClass { 2 // global ressource 3 private int counter = 0; 4 5 public void Execute() { 6 for (int i = 0; i < 10; i++) { 7 Monitor.Enter(this); // lock object 8 counter++; 9 Console.WriteLine(counter); 10 Monitor.Exit(this); // unlock object 11 } 12 } 13 } Im Vergleich zum Beispiel der unsychronisierten Umsetzung, wurden lediglich zwei Zeilen hinzugefügt (Zeile 7 und 10). Es wird an diesen beiden Stellen direkt auf ein Monitor- Objekt zugegriffen. Dies ist möglich, da es für jedes beliebige Objektinstanz automatisch genau einen Monitor gibt. Es kann daher auch keine Instanz der Klasse Monitor erstellt werden. Mit den Methoden Enter() und Exit() wird der Zugriff auf das Objekt gesperrt, bzw. wieder freigegeben. Als Parameter wird in diesem Fall jeweils die aktuelle Instanz der Klasse ExecClass übergeben. Nun betrachten wir erneut die Ausgabe:

10 Wir sehen, dass die Ausgabe nun stimmt und die Zahlen, wie erwartet, aufsteigend sortiert ausgegeben werden. Der Methodenaufruf erfolgt nun also synchron. Eine weitere Option, um Synchronisation zu erreichen, ist das Verwenden des lock-statements, wie es im folgenden Beispiel zum Einsatz kommt: 1 class ExecClass { 2 // global ressource 3 private int counter = 0; 4 5 public void Execute() { 6 for (int i = 0; i < 10; i++) { 7 lock(this) { // lock object 8 counter++; 9 Console.WriteLine(counter); 10 } // unlock object 11 } 12 } 13 } Auch hier gibt es nur eine kleine Änderung am Programm-Code, ebenfalls in den Zeilen 7 und 10. Das lock-statement verwendet intern ebenfalls die im vorherigen Beispiel erwähnte Monitor-Klasse und ist daher keine komplett neue Art der Synchronisation. Allerdings gibt es zwei entscheidende Vorteile. Zum einen wird der Bereich, der synchronisiert werden soll (der kritische Bereich) in einem sogenannten Wirkungsbereich (Scope) geschachtelt. Dies ist sinnvoll, denn wenn der Bereich nicht mit einer geschweiften Klammer wieder geschlossen wird, gibt es bereits zur Zeit des Kompilierens einen Fehler. Bei Verwendung des Monitors, kann es also einfach passieren, dass man den Aufruf der Exit()- Methode vergisst, oder dieser Aufruf aufgrund eines Programmfehlers nicht stattfindet. In beiden Fällen wird das gesperrte Objekt nicht mehr freigegeben. Als weiteren Vorteil ergibt sich die Tatsache, dass das lock-statement intern den kritischen Bereich automatisch in einen try-finally-block einbindet. Das bedeutet, dass falls es zu einem Programmfehler kommt, während ein Objekt gesperrt ist, wird im finally-teil die Sperre in jedem Fall wieder aufgehoben, damit andere Threads wieder auf des Objekt zugreifen können. Insgesamt bietet das Monitor-Konzept, bzw. das lock-statement eine schnelle und einfache Art und Weise, mit der Synchronisation erreicht werden kann. In einigen Fällen eignen sich jedoch andere von.net bereitgestelle Klassen und Methoden besser, wie z.b. die im nächsten Kapitel beschriebene ReaderWriterLockSlim-Methode. 5.3 Synchronisation mit ReaderWriterLockSlim Mit dem.net-framework 2.0 hat Microsoft die Klasse ReaderWriterLock eingeführt. Dies ist die Vorgängerklasse der neuen ReaderWriterLockSlim-Klasse, die mit dem.net- Framework 3.5 eingeführt wurde und von Microsoft für jede Neuentwicklung empfohlen wird, da diese Klasse eine deutlich höhere Leistung bringt und sie zudem einige Mechanismen enthält, die eine Vielzahl potentieller Deadlocks vermeiden kann [3]. Im Folgenden befindet sich ein kurzes Code-Beispiel: 10

11 1 class ExecClass { 2 // global ressource 3 private ReaderWriterLockSlim lockobj = new ReaderWriterLockSlim(); 4 private int counter = 0; 5 6 public void Execute() { 7 for (int i = 0; i < 10; i++) { 8 try { 9 lockobj.enterwritelock(); // lock object 10 counter++; 11 Console.WriteLine(counter); 12 } 13 finally { 14 lockobject.exitwritelock(); // unlock object 15 } 16 } 17 } 18 } In Zeile 3 wird ein neue Objekt mit dem Namen lockobj eingeführt. Es ist vom Typ ReaderWriterLockSlim und dient lediglich als Objekt, das gesperrt wird, sobald der kritische Bereich betreten wird. Der Sperr- bzw. Entsperrvorgang erfolgt mit den Methoden EnterWriteLock() und ExitWriteLock(). Interessant ist diese Form der Synchronisation, weil sie besonders für Szenarien geeignet ist, in denen es viele lesende Zugriffe und wenig schreibende Zugriffe auf die gemeinsam genutzte Ressource gibt. Denn es kann mit den Methoden EnterReadLock() und ExitReadLock() ein Schreibzugriff angefordert werden. Solange kein Schreibzugriff angefordert ist, kann von beliebig vielen Threads gleichzeitig gelesen werden. Sobald ein Schreibzugriff stattfindet, müssen die anderen lesenden oder auch anderen schreibenden Threads warten. Es können also gleichzeitig immer nur beliebig viele lesen oder genau einer schreiben. Besonders beim Zugriff auf Datenquellen wie Dateien oder Datenbanken ist ein solchen Konzept sehr sinnvoll und effizient. 5.4 Synchronisation mit MethodImpl-Attribut Wir betrachten zunächst ein kleines Beispiel: 1 using System.Runtime.CompilerServices; 2 3 class ExecClass { 4 // global ressource 5 private int counter = 0; 6 7 [MethodImpl(MethodImplOptions.Synchronized)] 8 public void Execute() { 9 for (int i = 0; i < 10; i++) { 10 counter++; 11 Console.WriteLine(counter); 12 } 13 } 14 } 11

12 Die benötigten Attribute befinden sich im Namespace System.Runtime.CompilerServices. Sobald eine Methode mit dem in Zeile 7 beschriebenen Attribut versehen wird, wird immer die gesamte Methode synchronisiert aufgerufen. Dies entspricht in etwa dem synchronized- Attribut in der Signatur einer Methode in Java. 6 Der Einsatz von Threadpools und BackgroundWorker-Threads Zwei andere sehr komfortable Konzepte in.net sind ThreadPools sowie BackgroundWorker- Threads. Ein Threadpool ist eine Threadauflistung, mit der verschiedene Aufgaben im Hintergrund ausgeführt werden können. Auf diese Weise kann der primäre Thread asynchron andere Aufgaben ausführen [4]. Die BackgroundWorker-Klasse ermöglicht das Ausführen eines Vorgangs auf einem separaten, dedizierten Thread [5]. 6.1 Threadpools Ein ThreadPool ist eine Menge von Threads, die bei jedem Prozess in.net automatisch zur Verfügung stehen. Das Erzeugen eines neuen Threads ist kostspielig, weil jeder Thread seinen eigenen Stapelspeicher (Stack) benötigt. Die Idee hinter dem ThreadPool ist, dass diese Threads permanent im Hintergrund existieren und darauf warten, als Delegate benutzt zu werden und asynchron und unabhängig vom Vordergrundthread Aufgaben zu erledigen. Einen solchen Thread kann man mit der Methode QueueUserWorkItem() anfordern. Diese Methode erwartet als Parameter eine Methode, die der ThreadPool-Thread aufrufen soll. Sobald ein neuer Arbeitsauftrag eingereicht wurde, kann er nicht mehr abgebrochen werden. Ist zur Zeit der Anforderung kein Thread im Pool frei, so wird mit der Ausführung so lange gewartet, bis ein Thread wieder frei ist. Die folgende Grafik veranschaulicht die Funktionsweise eines ThreadPools: Abbildung 2: Funktionsweise eines ThreadPools 12

13 6.2 BackgroundWorker-Threads Ein BackgroundWorker-Thread kommt in der Praxis sehr oft in Kombination mit einer grafischen Oberfläche (GUI) zum Einsatz. Ein typisches Szenario ist das Erledigen einer Aufgabe im Hintergrund, wie z.b. ein Kopier- oder Installationsvorgang. Damit die grafische Oberfläche weiterhin reagieren kann, wird die zu erledigende Arbeit einfach in einem BackgroundWorker-Thread ausgeführt. Im Vordergrund wird dann beispielsweise der aktuelle Fortschritt des Arbeitsvorganges in Form einer StatusBar ausgegeben. Mit dieser speziellen Klasse stehen dem Benutzer zusätzliche Optionen zur Verfügung. So kann der aktuelle Status und der Fortschritt des Arbeitsvorganges abgerufen und überprüft werden. Dem Programmierer stehen dazu unter anderem die Ereignisse DoWork, RunWoker- Completed und ProgressChanged zur Verfügung. Ein BackgroundWorker-Thread ist immer dann besonders sinnvoll, wenn nur wenige oder nur ein einzelner Hintergrund-Thread benötigt wird. Ein ThreadPool ist dagegen sinnvoller, wenn es viele kleine Aufgaben sind, die im Hintergrund erledigt werden sollen. 7 Programmierbeispiel: Simulierter Mailserver Zum Abschluss dieser Arbeit möchte ich ein konkretes Beispiel vorstellen, an dem ersichtlich wird, in welchen Fällen der Einsatz von Multithreading nicht nur sinnvoll, sondern auch absolut erforderlich ist. In Kapitel 2.2 habe ich die Problematik bei einem Mailserver erwähnt. Genau dieses Beispiel möchte ich nun in Form einer Simulation demonstrieren. 7.1 Die SingleThread-Variante Folgender Programm-Code zeigt eine abstrahierte Version eines Mailservers, der auf Tastatureingaben (simulierte eingehende s) wartet und diese dann verschickt. Der Sendevorgang wird durch ein Thread.Sleep() simuliert. Dabei soll die Dauer des Vorgangs zwischen 100 Millisekunden und 2 Sekunden liegen (hier durch einen Zufallsgenerator implementiert). In dieser ersten Variante wird der Wartevorgang auf eingehende s sowie der Sendevorgang über einen einzigen Thread realisiert. Es handelt sich also um die SingleThread-Variante: 13

14 1 class Program { 2 public static void Main(string[] args) { 3 Console.WriteLine("Listening for incoming messages..."); 4 while (true) { // loop for listening for incoming messages 5 string inputstring = Console.ReadLine(); 6 Send (inputString); 7 } 8 } 9 10 // simulates sending an 11 public static void Send (object messageargs) { 12 int randomint = new Random().Next(100, 2000); 13 Thread.Sleep(randomInt); // simulated time for sending 14 Console.WriteLine("Message ({0}) successful send in {1} ms.", messageargs, randomint); 15 } 16 } Betrachten wir nun was passiert, wenn wir der Reihe nach auf der Tastatur die Zahlen eins bis null eingeben: Abbildung 3: Simulierter Mailserver mit einem einzigen Thread Wir können erkennen, dass eine neue Nachricht immer erst wieder eingegeben werden kann, wenn die vorherige versendet worden ist. Das hat den Nachteil, dass alle nahezu gleichzeitig eintreffenden s lediglich nacheinander eingelesen und versendet werden können. Dauert nun ein einzelner Sendevorgang nun unverhältnismäßig lange, so müssen alle anderen s warten, bis dieser Vorgang abgeschlossen ist. Dieses Verhalten ist für große Dienstleister natürlich absolut unpraktikabel, deren Server vermutlich über 100 s pro Minute verarbeiten müssen. 14

15 7.2 Die MultiThread-Variante Wir verändern nun unser obiges Code-Beispiel und passen es so an, dass für jeden Sendevorgang ein eigener Thread erstellt wird. Dazu ersetzen wir die Zeile 6 mit folgenden zwei Zeilen: 1 Thread mailsender = new Thread(new ParameterizedThreadStart(Send )); 2 mailsender.start(inputstring); Durch diese minimale Anpassung des Codes verändert sich die Funktionsweise drastisch. Wir betrachten wieder die mögliche Ausgabe, die entsteht, wenn wir wieder die Zahlen eins bis zehn aufsteigend eingeben: Abbildung 4: Simulierter Mailserver mit mehreren Threads Als erstes fällt auf, dass erst sechs s eingehen, bevor eine davon raus geschickt wurde. Weiterhin sehen wir, dass Nachricht Nr. 4 als erstes verschickt wurde, bzw. dass die Sendereihenfolge grunsätzlich nicht der Reihenfolge entspricht, in der die s beim Mailserver eingehen. Genau dieses Verhalten haben wir durch den Einsatz mehrerer Threads bewirkt, denn jede , die eingeht kann in einem neuen Thread nahezu sofort versendet werden. Um dem Ganzen noch etwas mehr Praxis zu verleihen, wird im folgenden Unterkapitel ein konkreter Test mit Zeitmessung vorgenommen, der den Unterschied der beiden Varianten nochmals in Zahlen ausdrückt. 15

16 7.3 Konkreter Vergleich der beiden Varianten In diesem Test wird die Eingabe der zehn Nachrichten über ein externes Programm gelöst, damit das Eingehen der s in jedem Einzeltest nahezu gleich schnell erfolgt. Gemessen wurde nun die Zeit, die mit dem Eingehen der ersten beginnt und mit dem Versenden der letzten endet. Aufgrund der zufällig generierten Wartezeit, die das Versenden der s simuliert, wurden beide Varianten des Mailservers 5-mal getestet und ein Durchschnittswert gebildet. Die Messergebnisse sind in der folgenden Tabelle übersichtlich dargestellt: Versuch Single-Thread Multi-Thread 1 13,94 s 2,44 s 2 11,39 s 2,35 s 3 12,97 s 2,54 s 4 11,23 s 2,75 s 5 6,28 s 2,27 s 11,16 s 2,47 s Die Ergebnisse fallen, wie erwartet aus. Die MultiThread-Variante kann alle s deutlich schneller versenden, als die SingleThread-Variante, da bei dieser ja die s nur nacheinander eingehen und nacheinander versendet werden können. Der Unterschied ist jedoch beträchtlich. Im Schnitt braucht die SingleThread-Variante ca. 4,5x länger als die MultiThread-Variante. Dieses Beispiel verdeutlicht sehr eindeutig, dass das einsetzen mehrerer Threads in einigen Anwendungen erhebliche Leistungssteigerungen bringt. In unserem Beispiel wurde eine Verkürzung auf ca. 22% der ursprünglichen Laufzeit gemessen. 8 Abschließende Zusammenfassung Das Thema Multithreading hat in Zeiten des 21. Jahrhunderts eine hohe Relevanz. Einzelne Prozesse können unmittelbar vom Einsatz Multicore-fähiger Systeme profitieren und einen solchen Prozessor mit mehreren CPUs besser auslasten. Gerade bei Anwendung, die aufwändige Berechnungen druchführen oder viele Dinge gleichzeitig erledigen müssen, ist durch Multithreading ein Leistungsvorteil erreichbar. Der aktuelle Trend der Prozessorentwicklung geht noch viel stärker in Richtung Multicore-Systeme. Führende Prozessorhersteller haben bereits Prototypen mit über 100 Rechenkernen entwickelt. Es ist also zu erwarten, dass in den kommenden Jahren das Thema Multithreading von noch größerer Bedeutung sein wird. Auch bei allen positiven Aspekten und Leistungsoptimierungen, die erreicht werden können, sind die damit verbundenen Probleme und Risiken zu beachten. Anwendungen, die mehrere Threads verwenden, sind extrem fehleranfällig beim gleichzeitigen Zugriff auf eine Ressource. Auch bringen mehrerer Threads in einer Anwendung, die ohnehin keine Aufgaben parallel erledigen kann, keine Vorteile. Ob Multithreading genutzt werden soll oder nicht, muss letztendlich der Programmierer entscheiden. 16

17 9 Anhang 9.1 Quellcode und Binärdateien des Mailserver-Beispiels Die Quelldateien befinden sich in Form eines Microsoft Visual Studio 2010 Projekts in der Datei Mailserver src.zip. Die Birärdateien befinden sich in der Datei Mailserver bin.zip. Es ist sowohl die SingleThreadals auch die MultiThread-Variante darin enthalten. 9.2 Literaturverzeichnis Folgende Quellen wurden für das Erstellen der Seminararbeit verwendet: [1] Vorl. 6: Single- und Multitasking, [ zuletzt geändert am: ], [2] Thread (Informatik), [ zuletzt geändert am: ], (Informatik) [3] ReaderWriterLock-Klasse, [ zuletzt geändert am: ], [4] Gewusst wie: Verwenden von Threadpools, [ zuletzt geändert am: ], [5] Gewusst wie: Verwenden von Threadpools, [ zuletzt geändert am: ], Abbildungsverzeichnis Folgende Abbildungen wurden in der Seminararbeit verwendet: [Abb. 1] [Abb. 2] Laurent Haan: Multithreading in C#, [ zuletzt geändert am: ], Threads und Prioritaetsklassen Threads Thread Status Laurent Haan: Multithreading in C#, [ zuletzt geändert am: ] multithreading-in-csharp.html#multithreading in DotNET ThreadPool und asynchrone Methoden ThreadPool 17

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Multi-Threading. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de

Multi-Threading. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Multi-Threading Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Einführung in Threads Threads synchronisieren ThreadPools Thread = unabhängiger Ausführungspfad, der gleichzeitig

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI TTS - TinyTimeSystem Unterrichtsprojekt BIBI Mathias Metzler, Philipp Winder, Viktor Sohm 28.01.2008 TinyTimeSystem Inhaltsverzeichnis Problemstellung... 2 Lösungsvorschlag... 2 Punkte die unser Tool erfüllen

Mehr

icloud nicht neu, aber doch irgendwie anders

icloud nicht neu, aber doch irgendwie anders Kapitel 6 In diesem Kapitel zeigen wir Ihnen, welche Dienste die icloud beim Abgleich von Dateien und Informationen anbietet. Sie lernen icloud Drive kennen, den Fotostream, den icloud-schlüsselbund und

Mehr

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen Alexander Schunk Henry Trobisch Inhalt 1. Vergleich der Unit-Tests... 2 2. Vergleich der Codeabdeckungs-Tests... 2 3. Vergleich

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Architektur Verteilter Systeme Teil 2: Prozesse und Threads Architektur Verteilter Systeme Teil 2: Prozesse und Threads 21.10.15 1 Übersicht Prozess Thread Scheduler Time Sharing 2 Begriff Prozess und Thread I Prozess = Sequentiell ablaufendes Programm Thread =

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

Grundlagen verteilter Systeme

Grundlagen verteilter Systeme Universität Augsburg Insitut für Informatik Prof. Dr. Bernhard Bauer Wolf Fischer Christian Saad Wintersemester 08/09 Übungsblatt 3 12.11.08 Grundlagen verteilter Systeme Lösungsvorschlag Aufgabe 1: a)

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Urlaubsregel in David

Urlaubsregel in David Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5

Mehr

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze Ihre Interessentendatensätze bei inobroker Wenn Sie oder Ihre Kunden die Prozesse von inobroker nutzen, werden Interessentendatensätze erzeugt. Diese können Sie direkt über inobroker bearbeiten oder mit

Mehr

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC PARAGON Technologie GmbH, Systemprogrammierung Heinrich-von-Stephan-Str. 5c 79100 Freiburg, Germany Tel. +49 (0) 761 59018201 Fax +49 (0) 761 59018130 Internet www.paragon-software.com Email sales@paragon-software.com

Mehr

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst. 40-Tage-Wunder- Kurs Umarme, was Du nicht ändern kannst. Das sagt Wikipedia: Als Wunder (griechisch thauma) gilt umgangssprachlich ein Ereignis, dessen Zustandekommen man sich nicht erklären kann, so dass

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Monitore. Klicken bearbeiten

Monitore. Klicken bearbeiten Sascha Kretzschmann Institut für Informatik Monitore Formatvorlage und deren Umsetzung des Untertitelmasters durch Klicken bearbeiten Inhalt 1. Monitore und Concurrent Pascal 1.1 Warum Monitore? 1.2 Monitordefinition

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

Berechnungen in Access Teil I

Berechnungen in Access Teil I in Access Teil I Viele Daten müssen in eine Datenbank nicht eingetragen werden, weil sie sich aus anderen Daten berechnen lassen. Zum Beispiel lässt sich die Mehrwertsteuer oder der Bruttopreis in einer

Mehr

Nach der Installation kann es auch schon losgehen. Für unseren Port Scanner erstellen wir zunächst ein neues Projekt:

Nach der Installation kann es auch schon losgehen. Für unseren Port Scanner erstellen wir zunächst ein neues Projekt: Ein Port Scanner ist eine gute Möglichkeit den eigenen Server auf offene Ports zu scannen. Zu viele nicht benötigte und offene Ports können auf Ihrem Server und auf Ihrem Computer ein Sicherheitsrisiko

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

ec@ros2-installer ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg 7 64331 Weiterstadt

ec@ros2-installer ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg 7 64331 Weiterstadt ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Inhaltsverzeichnis 1 Download des ecaros2-installer...3 2 Aufruf des ecaros2-installer...3 2.1 Konsolen-Fenster (Windows)...3 2.2 Konsolen-Fenster

Mehr

Folgeanleitung für Klassenlehrer

Folgeanleitung für Klassenlehrer Folgeanleitung für Klassenlehrer 1. Das richtige Halbjahr einstellen Stellen sie bitte zunächst das richtige Schul- und Halbjahr ein. Ist das korrekte Schul- und Halbjahr eingestellt, leuchtet die Fläche

Mehr

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware Datenübernahme von HKO 5.9 zur Advolux Kanzleisoftware Die Datenübernahme (DÜ) von HKO 5.9 zu Advolux Kanzleisoftware ist aufgrund der von Update zu Update veränderten Datenbank (DB)-Strukturen in HKO

Mehr

Der PDF-Druck. EDIORG Software GmbH, Linz

Der PDF-Druck. EDIORG Software GmbH, Linz Der PDF-Druck Der Makler hat nun auch die Möglichkeit, ein als PDF generiertes Angebot per E-Mail 1. als Anhang oder 2. als Link zu versenden oder 3. wie bisher das PDF über WORD zu generieren. Es soll

Mehr

Bedienungsanleitung für den SecureCourier

Bedienungsanleitung für den SecureCourier Bedienungsanleitung für den SecureCourier Wo kann ich den SecureCourier nach der Installation auf meinem Computer finden? Den SecureCourier finden Sie dort, wo Sie mit Dateien umgehen und arbeiten. Bei

Mehr

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen) 1. Einführung: Über den ODBC-Zugriff können Sie bestimmte Daten aus Ihren orgamax-mandanten in anderen Anwendungen (beispielsweise Microsoft Excel oder Microsoft Access) einlesen. Dies bietet sich beispielsweise

Mehr

Sie befinden sich hier: WebHosting-FAQ E-Mail E-Mail-Clients - Einrichtung und Konfiguration Outlook Express Artikel #1

Sie befinden sich hier: WebHosting-FAQ E-Mail E-Mail-Clients - Einrichtung und Konfiguration Outlook Express Artikel #1 Sie befinden sich hier: WebHosting-FAQ E-Mail E-Mail-Clients - Einrichtung und Konfiguration Outlook Express Artikel #1 Outlook Express Hinweis: Die nachfolgende Beschreibung dient der Einrichtung eines

Mehr

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach 34 70 17 28339 Bremen. Friedrich-Mißler-Straße 42 28211 Bremen

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach 34 70 17 28339 Bremen. Friedrich-Mißler-Straße 42 28211 Bremen Grontmij GmbH Postfach 34 70 17 28339 Bremen Friedrich-Mißler-Straße 42 28211 Bremen T +49 421 2032-6 F +49 421 2032-747 E info@grontmij.de W www.grontmij.de DELFI Benutzeranleitung Dateiversand für unsere

Mehr

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Roboter programmieren mit NXC für Lego Mindstorms NXT 1. Auflage Roboter programmieren mit NXC für Lego Mindstorms NXT schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Verlag

Mehr

ACHTUNG: Voraussetzungen für die Nutzung der Funktion s-exposé sind:

ACHTUNG: Voraussetzungen für die Nutzung der Funktion s-exposé sind: ACHTUNG: Voraussetzungen für die Nutzung der Funktion s-exposé sind: - Upgrade auf FLOWFACT Version Performer CRM 2014 R2 (ab Juli erhältlich) - Mindestens SQL Server 2005 - vorhandene Installation von.net

Mehr

Hilfedatei der Oden$-Börse Stand Juni 2014

Hilfedatei der Oden$-Börse Stand Juni 2014 Hilfedatei der Oden$-Börse Stand Juni 2014 Inhalt 1. Einleitung... 2 2. Die Anmeldung... 2 2.1 Die Erstregistrierung... 3 2.2 Die Mitgliedsnummer anfordern... 4 3. Die Funktionen für Nutzer... 5 3.1 Arbeiten

Mehr

2A Basistechniken: Weitere Aufgaben

2A Basistechniken: Weitere Aufgaben 2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen

Mehr

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über

Mehr

DOKUMENTATION VOGELZUCHT 2015 PLUS

DOKUMENTATION VOGELZUCHT 2015 PLUS DOKUMENTATION VOGELZUCHT 2015 PLUS Vogelzucht2015 App für Geräte mit Android Betriebssystemen Läuft nur in Zusammenhang mit einer Vollversion vogelzucht2015 auf einem PC. Zusammenfassung: a. Mit der APP

Mehr

Kontoname ist Mailanschrift ohne @ecosign.net! Maximale Mailboxgrösse: Maximale Nachrichtengrösse: Haltezeit der Nachrichten:

Kontoname ist Mailanschrift ohne @ecosign.net! Maximale Mailboxgrösse: Maximale Nachrichtengrösse: Haltezeit der Nachrichten: Serverdaten: @ecosign.net Mailserver: Webmail: POP3: SMTP: http://webmail.ecosign.net pop.ecosign.net smtp.ecosign.net Kontoname ist Mailanschrift ohne @ecosign.net! Nutzung: Maximale Mailboxgrösse: Maximale

Mehr

Anwenderdokumentation AccountPlus GWUPSTAT.EXE

Anwenderdokumentation AccountPlus GWUPSTAT.EXE AccountPlus Inhaltsverzeichnis Inhaltsverzeichnis Anwenderdokumentation AccountPlus GWUPSTAT.EXE (vorläufig) ab Version 6.01 INHALTSVERZEICHNIS...1 1 ALLGEMEINES...2 2 INSTALLATION UND PROGRAMMAUFRUF...2

Mehr

Eine Anleitung, wie Sie Mozilla Thunderbird 2 installieren und konfigurieren können. Installation... 2. Erstkonfiguration... 4

Eine Anleitung, wie Sie Mozilla Thunderbird 2 installieren und konfigurieren können. Installation... 2. Erstkonfiguration... 4 E-Mail-Client Mozilla Thunderbird für Studierende Installation und Einrichtung Mozilla Thunderbird ist ein Open-Source-E-Mail-Programm und -Newsreader des Mozilla-Projekts. Es ist neben Microsoft Outlook

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Windows 8 Lizenzierung in Szenarien

Windows 8 Lizenzierung in Szenarien Windows 8 Lizenzierung in Szenarien Windows Desktop-Betriebssysteme kommen in unterschiedlichen Szenarien im Unternehmen zum Einsatz. Die Mitarbeiter arbeiten an Unternehmensgeräten oder bringen eigene

Mehr

Online-Prüfungs-ABC. ABC Vertriebsberatung GmbH Bahnhofstraße 94 69151 Neckargemünd

Online-Prüfungs-ABC. ABC Vertriebsberatung GmbH Bahnhofstraße 94 69151 Neckargemünd Online-Prüfungs-ABC ABC Vertriebsberatung GmbH Bahnhofstraße 94 69151 Neckargemünd Telefon Support: 0 62 23 / 86 55 55 Telefon Vertrieb: 0 62 23 / 86 55 00 Fax: 0 62 23 / 80 55 45 (c) 2003 ABC Vertriebsberatung

Mehr

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock infach Ihr Weg zum finanzellen Erfolg Geld Florian Mock FBV Die Grundlagen für finanziellen Erfolg Denn Sie müssten anschließend wieder vom Gehaltskonto Rückzahlungen in Höhe der Entnahmen vornehmen, um

Mehr

Erstellen einer digitalen Signatur für Adobe-Formulare

Erstellen einer digitalen Signatur für Adobe-Formulare Erstellen einer digitalen Signatur für Adobe-Formulare (Hubert Straub 24.07.13) Die beiden Probleme beim Versenden digitaler Dokumente sind einmal die Prüfung der Authentizität des Absenders (was meist

Mehr

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) 1 Einleitung... 2 2 Download und Installation... 3 2.1 Installation von WindowsXPMode_de-de.exe... 4 2.2 Installation von Windows6.1-KB958559-x64.msu...

Mehr

Einrichtung eines E-Mail-Kontos bei MS Office Outlook 2007 (Windows) Stand: 03/2011

Einrichtung eines E-Mail-Kontos bei MS Office Outlook 2007 (Windows) Stand: 03/2011 Einrichtung eines E-Mail-Kontos bei MS Office Outlook 2007 (Windows) Stand: 03/2011 1. Klicken Sie auf Start, wählen Sie Alle Programme, suchen Sie den Ordner Microsoft Office und starten Sie per Klick

Mehr

Outlook Express: Einrichtung E-Mail Account

Outlook Express: Einrichtung E-Mail Account Outlook Express: Einrichtung E-Mail Account Die nachfolgende Beschreibung dient der Einrichtung eines Accounts zum Abruf und Versenden von Mails über den Mailserver unter Microsoft Outlook-Express 5.0

Mehr

Lizenzen auschecken. Was ist zu tun?

Lizenzen auschecken. Was ist zu tun? Use case Lizenzen auschecken Ihr Unternehmen hat eine Netzwerk-Commuterlizenz mit beispielsweise 4 Lizenzen. Am Freitag wollen Sie Ihren Laptop mit nach Hause nehmen, um dort am Wochenende weiter zu arbeiten.

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

E-Mail-Konten für Studierende und Zugriffswege auf die Mail-Systeme der Hochschule Rhein-Waal

E-Mail-Konten für Studierende und Zugriffswege auf die Mail-Systeme der Hochschule Rhein-Waal E-Mail-Konten für Studierende und Zugriffswege auf die Mail-Systeme der Hochschule Rhein-Waal Version 1.2 vom 18.06.2010 erstellt von Michael Baumann Autor: Michael Baumann Seite 1 Inhaltsverzeichnis Änderungen:...

Mehr

TechNote: Exchange Journaling aktivieren

TechNote: Exchange Journaling aktivieren Produkt: Kurzbeschreibung: NetOrchestra MA Emailarchivierung Exchange Journaling aktivieren Diese Anleitung hilft Ihnen, das nachfolgend geschilderte Problem zu beheben. Dazu sollten Sie über gute bis

Mehr

E-MAIL VERWALTUNG. Postfächer, Autoresponder, Weiterleitungen, Aliases. http://www.athost.at. Bachstraße 47, 3580 Mödring office@athost.

E-MAIL VERWALTUNG. Postfächer, Autoresponder, Weiterleitungen, Aliases. http://www.athost.at. Bachstraße 47, 3580 Mödring office@athost. E-MAIL VERWALTUNG Postfächer, Autoresponder, Weiterleitungen, Aliases http://www.athost.at Bachstraße 47, 3580 Mödring office@athost.at Loggen Sie sich zunächst unter http://www.athost.at/kundencenter

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Tipps und Tricks zu Netop Vision und Vision Pro

Tipps und Tricks zu Netop Vision und Vision Pro Tipps und Tricks zu Netop Vision und Vision Pro Anwendungen auf Schülercomputer freigeben und starten Netop Vision ermöglicht Ihnen, Anwendungen und Dateien auf allen Schülercomputern gleichzeitig zu starten.

Mehr

Synchronisation in Java. Invisible Web

Synchronisation in Java. Invisible Web Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections

Mehr

Kommunikations-Management

Kommunikations-Management Tutorial: Wie kann ich E-Mails schreiben? Im vorliegenden Tutorial lernen Sie, wie Sie in myfactory E-Mails schreiben können. In myfactory können Sie jederzeit schnell und einfach E-Mails verfassen egal

Mehr

Speicher in der Cloud

Speicher in der Cloud Speicher in der Cloud Kostenbremse, Sicherheitsrisiko oder Basis für die unternehmensweite Kollaboration? von Cornelius Höchel-Winter 2013 ComConsult Research GmbH, Aachen 3 SYNCHRONISATION TEUFELSZEUG

Mehr

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.

Mehr

Folgeanleitung für Fachlehrer

Folgeanleitung für Fachlehrer 1. Das richtige Halbjahr einstellen Folgeanleitung für Fachlehrer Stellen sie bitte zunächst das richtige Schul- und Halbjahr ein. Ist das korrekte Schul- und Halbjahr eingestellt, leuchtet die Fläche

Mehr

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000 Folgende Anleitung beschreibt, wie Sie ein bestehendes Postfach in Outlook Express, bzw. Microsoft Outlook bis Version 2000 einrichten können. 1. Öffnen Sie im Menü die Punkte Extras und anschließend Konten

Mehr

1&1 Webhosting FAQ Outlook Express

1&1 Webhosting FAQ Outlook Express Seite 1 von 6 Sie befinden sich hier: WebHosting-FAQ E-Mail & Unified Messaging E-Mail-Clients - Einrichtung und Konfiguration Outlook Express Artikel #1 Outlook Express Hinweis: Die nachfolgende Beschreibung

Mehr

TeamSpeak3 Einrichten

TeamSpeak3 Einrichten TeamSpeak3 Einrichten Version 1.0.3 24. April 2012 StreamPlus UG Es ist untersagt dieses Dokument ohne eine schriftliche Genehmigung der StreamPlus UG vollständig oder auszugsweise zu reproduzieren, vervielfältigen

Mehr

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel Orville Bennett Übersetzung: Thomas Bögel 2 Inhaltsverzeichnis 1 Einführung 5 2 KNetAttach verwenden 6 2.1 Hinzufügen von Netzwerkordnern............................ 6 3 Rundgang durch KNetAttach 8 4 Danksagungen

Mehr

Technische Dokumentation SilentStatistikTool

Technische Dokumentation SilentStatistikTool Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...

Mehr

Verarbeitung der Eingangsmeldungen in einem Callcenter

Verarbeitung der Eingangsmeldungen in einem Callcenter Q-up ist ein Produkt der: Anwendungsbeispiele Verarbeitung der Eingangsmeldungen in einem Callcenter Der Testdatengenerator Der Testdatengenerator Verarbeitung der Eingangsmeldungen in einem Callcenter

Mehr

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb CashPro basiert auf Accesstechnologie 2003 und ist auch unter den aktuellen Accessversionen 2007 bis 2013 einsetzbar und Mehrbenutzerfähig.

Mehr

Sie wollen Was heißt das? Grundvoraussetzung ist ein Bild oder mehrere Bilder vom Wechseldatenträger

Sie wollen Was heißt das? Grundvoraussetzung ist ein Bild oder mehrere Bilder vom Wechseldatenträger Den Speicherplatz wechseln oder eine Sicherungskopie erstellen. Es lässt sich nicht verhindern. Manche Sachen liegen am falschen Platz, können gelöscht werden oder man will vor der Bearbeitung eine Sicherungskopie

Mehr

In 15 einfachen Schritten zum mobilen PC mit Paragon Drive Copy 10 und Microsoft Windows Virtual PC

In 15 einfachen Schritten zum mobilen PC mit Paragon Drive Copy 10 und Microsoft Windows Virtual PC PARAGON Technologie GmbH, Systemprogrammierung Heinrich-von-Stephan-Str. 5c 79100 Freiburg, Germany Tel. +49 (0) 761 59018201 Fax +49 (0) 761 59018130 Internet www.paragon-software.com Email sales@paragon-software.com

Mehr

MCRServlet Table of contents

MCRServlet Table of contents Table of contents 1 Das Zusammenspiel der Servlets mit dem MCRServlet... 2 1 Das Zusammenspiel der Servlets mit dem MCRServlet Als übergeordnetes Servlet mit einigen grundlegenden Funktionalitäten dient

Mehr

Der Kalender im ipad

Der Kalender im ipad Der Kalender im ipad Wir haben im ipad, dem ipod Touch und dem iphone, sowie auf dem PC in der Cloud einen Kalender. Die App ist voreingestellt, man braucht sie nicht laden. So macht es das ipad leicht,

Mehr

Hilfe zur Urlaubsplanung und Zeiterfassung

Hilfe zur Urlaubsplanung und Zeiterfassung Hilfe zur Urlaubsplanung und Zeiterfassung Urlaubs- und Arbeitsplanung: Mit der Urlaubs- und Arbeitsplanung kann jeder Mitarbeiter in Coffee seine Zeiten eintragen. Die Eintragung kann mit dem Status anfragen,

Mehr

Drucken aus der Anwendung

Drucken aus der Anwendung Drucken aus der Anwendung Drucken aus der Anwendung Nicht jeder Großformatdruck benötigt die volle Funktionsvielfalt von PosterJet - häufig sind es Standarddrucke wie Flussdiagramme und Organigramme die

Mehr

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Second Steps in eport 2.0 So ordern Sie Credits und Berichte Second Steps in eport 2.0 So ordern Sie Credits und Berichte Schritt 1: Credits kaufen, um Zugangscodes generieren zu können Wählen Sie Credits verwalten und klicken Sie auf Credits kaufen. Geben Sie nun

Mehr

SJ OFFICE - Update 3.0

SJ OFFICE - Update 3.0 SJ OFFICE - Update 3.0 Das Update auf die vorherige Version 2.0 kostet netto Euro 75,00 für die erste Lizenz. Das Update für weitere Lizenzen kostet jeweils netto Euro 18,75 (25%). inkl. Programmsupport

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Neue Funktionen im GUI für PC-DMIS V3.x 4.x Seite 1 von 8

Neue Funktionen im GUI für PC-DMIS V3.x 4.x Seite 1 von 8 Neue Funktionen im GUI für PC-DMIS V3.x 4.x Seite 1 von 8 Neue Funktionen im GUI ab V 2.x für PC-DMIS Wie funktioniert GUI für PC-DMIS? GUI heißt Grafical User Interface. Das bedeutet grafische Benutzer

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

Mehr

E Mail Versand mit der Schild NRW Formularverwaltung

E Mail Versand mit der Schild NRW Formularverwaltung -Seite 1- E Mail Versand mit der Schild NRW Formularverwaltung Seit der Version 1.12.3.97 der Reportverwaltung ist die Möglichkeit integriert, E Mails direkt, d.h. ohne Umweg über einen externen Mailclient

Mehr

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer. Benutzerhandbuch Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer. 1 Startseite Wenn Sie die Anwendung starten, können Sie zwischen zwei Möglichkeiten wählen 1) Sie können eine Datei für

Mehr

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert: Firewall für Lexware professional konfigurieren Inhaltsverzeichnis: 1. Allgemein... 1 2. Einstellungen... 1 3. Windows XP SP2 und Windows 2003 Server SP1 Firewall...1 4. Bitdefender 9... 5 5. Norton Personal

Mehr

5.2 Neue Projekte erstellen

5.2 Neue Projekte erstellen 5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort

Mehr

Ein Hinweis vorab: Mailkonfiguration am Beispiel von Thunderbird

Ein Hinweis vorab: Mailkonfiguration am Beispiel von Thunderbird Mailkonfiguration am Beispiel von Thunderbird Ein Hinweis vorab: Sie können beliebig viele verschiedene Mailkonten für Ihre Domain anlegen oder löschen. Das einzige Konto, das nicht gelöscht werden kann,

Mehr

COMPUTERIA VOM 25.2.15 SERIENBRIEFE UND ETIKETTENDRUCK

COMPUTERIA VOM 25.2.15 SERIENBRIEFE UND ETIKETTENDRUCK COMPUTERIA VOM 25.2.15 SERIENBRIEFE UND ETIKETTENDRUCK WAS SIND SERIENBRIEFE? Bei einem Serienbrief handelt es sich um eine Art Word Vorlage, bei der das gleiche Dokument mehrmals gedruckt werden muss,

Mehr

Einrichtung eines E-Mail-Kontos bei Mac OS X Mail Stand: 03/2011

Einrichtung eines E-Mail-Kontos bei Mac OS X Mail Stand: 03/2011 Einrichtung eines E-Mail-Kontos bei Mac OS X Mail Stand: 03/2011 1. Starten Sie Mail per Klick auf das Symbol im Dock. 2. Sie sehen die Ausgangsansicht von Mac OS X Mail. 3. Klicken Sie in der Fensterleiste

Mehr

RT Request Tracker. Benutzerhandbuch V2.0. Inhalte

RT Request Tracker. Benutzerhandbuch V2.0. Inhalte RT Request Tracker V2.0 Inhalte 1 Was ist der RT Request Tracker und wo finde ich ihn?...2 2 Was möchten wir damit erreichen?...2 3 Wie erstelle ich ein Ticket?...2 4 Wie wird das Ticket abgearbeitet?...4

Mehr

EINFACHES HAUSHALT- KASSABUCH

EINFACHES HAUSHALT- KASSABUCH EINFACHES HAUSHALT- KASSABUCH Arbeiten mit Excel Wir erstellen ein einfaches Kassabuch zur Führung einer Haushalts- oder Portokasse Roland Liebing, im November 2012 Eine einfache Haushalt-Buchhaltung (Kassabuch)

Mehr

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Bedienungsanleitung. Stand: 26.05.2011. Copyright 2011 by GEVITAS GmbH www.gevitas.de

Bedienungsanleitung. Stand: 26.05.2011. Copyright 2011 by GEVITAS GmbH www.gevitas.de GEVITAS-Sync Bedienungsanleitung Stand: 26.05.2011 Copyright 2011 by GEVITAS GmbH www.gevitas.de Inhalt 1. Einleitung... 3 1.1. Installation... 3 1.2. Zugriffsrechte... 3 1.3. Starten... 4 1.4. Die Menü-Leiste...

Mehr

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Sie befinden sich hier: WebHosting-FAQ E-Mail & Unified Messaging E-Mail-Clients - Einrichtung und Konfiguration Outlook Express Artikel #1

Sie befinden sich hier: WebHosting-FAQ E-Mail & Unified Messaging E-Mail-Clients - Einrichtung und Konfiguration Outlook Express Artikel #1 1 von 9 23.05.2005 11:12 Sie befinden sich hier: WebHosting-FAQ E-Mail & Unified Messaging E-Mail-Clients - Einrichtung und Konfiguration Outlook Express Artikel #1 Outlook Express Hinweis: Die nachfolgende

Mehr

Enigmail Konfiguration

Enigmail Konfiguration Enigmail Konfiguration 11.06.2006 Steffen.Teubner@Arcor.de Enigmail ist in der Grundkonfiguration so eingestellt, dass alles funktioniert ohne weitere Einstellungen vornehmen zu müssen. Für alle, die es

Mehr