Faden (Computerwissenschaft)

In der Informatik ist ein Faden der Ausführung die kleinste Einheit der Verarbeitung, die durch ein Betriebssystem auf dem Plan stehen kann. Ein Faden ist ein Leichtgewichtsprozess. Die Durchführung von Fäden und Prozesse unterscheiden sich von einem Betriebssystem bis einen anderen, aber in den meisten Fällen wird ein Faden innerhalb eines Prozesses enthalten. Vielfache Fäden können innerhalb desselben Prozesses bestehen und Mittel wie Gedächtnis teilen, während verschiedene Prozesse diese Mittel nicht teilen. Insbesondere die Fäden eines Prozesses teilen die Instruktionen des Letzteren (sein Code) und sein Zusammenhang (die Werte dass seine Variable-Verweisung in jedem gegebenen Moment). Um eine Analogie zu geben, sind vielfache Fäden in einem Prozess vielfachen Köchen ähnlich, die von demselben Kochbuch und im Anschluss an seine Instruktionen lesen, nicht notwendigerweise von derselben Seite.

Auf einem einzelnen Verarbeiter kommt Nebenläufigkeit allgemein bei der Zeitabteilung gleichzeitig sendend (als im Mehrbeschäftigen) vor: Der Verarbeiter schaltet zwischen verschiedenen Fäden um. Dieser Zusammenhang, der allgemein umschaltet, geschieht oft genug, dass der Benutzer die Fäden oder Aufgaben als laufend zur gleichen Zeit wahrnimmt. Auf einem Mehrverarbeiter (einschließlich des Mehrkernsystems) werden die Fäden oder Aufgaben wirklich zur gleichen Zeit, mit jedem Verarbeiter oder Kern laufen, der einen besonderen Faden oder Aufgabe führt.

Viele moderne Betriebssysteme unterstützen direkt sowohl zeitaufgeschnitten als auch mit einem Prozess-Planer einfädelnder Mehrverarbeiter. Der Kern eines Betriebssystems erlaubt Programmierern, Fäden über die Systemanruf-Schnittstelle zu manipulieren. Einige Durchführungen werden einen Kernfaden genannt, wohingegen ein Leichtgewichtsprozess (LWP) ein spezifischer Typ des Kernfadens ist, der denselben Staat und Information teilt.

Programme können Benutzerraumfäden haben, wenn sie mit Zeitmessern, Signalen oder anderen Methoden einfädeln, ihre eigene Ausführung zu unterbrechen, eine Art ad hoc Zeitscheibenverfahren durchführend.

Wie sich Fäden von Prozessen unterscheiden

Fäden unterscheiden sich von traditionellen stark mehrbeanspruchenden Betriebssystemprozessen darin:

  • Prozesse sind normalerweise unabhängig, während Fäden als Teilmengen eines Prozesses bestehen
  • Prozesse tragen beträchtlich mehr Zustandinformation als Fäden, wohingegen vielfache Fäden innerhalb eines Prozesses Prozess-Staat sowie Gedächtnis und andere Mittel teilen
  • Prozesse haben getrennte Adressräume, wohingegen Fäden ihren Adressraum teilen
  • Prozesse wirken nur durch systemgezur Verfügung stellte Zwischenprozess-Nachrichtenmechanismen aufeinander
  • Zusammenhang, der zwischen Fäden in demselben Prozess umschaltet, ist normalerweise schneller als Zusammenhang, der zwischen Prozessen umschaltet.
Wie man

sagt, haben Systeme wie Windows NT und OS/2 "preiswerte" Fäden und "teure" Prozesse; in anderen Betriebssystemen gibt es nicht einen so großen Unterschied außer den Kosten des Adressraum-Schalters, der ein TLB-Erröten einbezieht.

Nebenläufigkeit

Die Nebenläufigkeit als ein weit verbreitetes Programmier- und Ausführungsmodell erlaubt vielfachen Fäden, innerhalb des Zusammenhangs eines einzelnen Prozesses zu bestehen. Diese Fäden teilen die Mittel des Prozesses, aber sind im Stande, unabhängig durchzuführen. Das Gewindeprogrammiermodell versorgt Entwickler mit einer nützlichen Abstraktion der gleichzeitigen Ausführung. Jedoch vielleicht ist die interessanteste Anwendung der Technologie, wenn es auf einen einzelnen Prozess angewandt wird, um parallele Ausführung auf einem Mehrverarbeiter-System zu ermöglichen.

Dieser Vorteil eines Mehrgewindeprogramms erlaubt ihm, schneller auf Computersystemen zu funktionieren, die vielfache Zentraleinheiten, Zentraleinheiten mit vielfachen Kernen, oder über eine Traube von Maschinen haben — weil die Fäden des Programms natürlich sich zur aufrichtig gleichzeitigen Ausführung leihen. In solch einem Fall muss der Programmierer darauf achten, Rasse-Bedingungen und andere nichtintuitive Handlungsweisen zu vermeiden. In der Größenordnung von richtig zu manipulierenden Daten werden Fäden häufig zum Rendezvous rechtzeitig brauchen, um die Daten in der richtigen Ordnung zu bearbeiten. Fäden können auch gegenseitig exklusive Operationen verlangen (häufig durchgeführte Verwenden-Semaphore), um allgemeine Daten davon abzuhalten, gleichzeitig modifiziert, oder während im Prozess davon gelesen zu werden, modifiziert zu werden. Der unbesonnene Gebrauch solcher Primitiven kann zu toten Punkten führen.

Ein anderer Gebrauch der Nebenläufigkeit, anwendbar sogar für Systeme der einzelnen Zentraleinheit, ist die Fähigkeit zu einer Anwendung, um antwortend auf den Eingang zu bleiben. In einem Einzeln-Gewindeprogramm, wenn die Hauptausführungsfaden-Blöcke auf einer Langzeitaufgabe, die komplette Anwendung scheinen kann zu frieren. Durch das Bewegen solcher Langzeitaufgaben zu einem Arbeiter-Faden, der gleichzeitig mit dem Hauptausführungsfaden läuft, ist es für die Anwendung möglich, antwortend auf den Benutzereingang zu bleiben, während man Aufgaben im Vordergrund durchführt. Andererseits, im grössten Teil der Fall-Nebenläufigkeit ist nicht die einzige Weise, ein Programm antwortend mit blockierungsfreien Signalen von I/O und/oder Unix zu halten, die verfügbar sind, um ähnliche Ergebnisse zu gewinnen.

Betriebssysteme planen Fäden auf eine von zwei Weisen:

  1. Vorkaufsnebenläufigkeit wird allgemein als die höhere Annäherung betrachtet, weil es dem Betriebssystem erlaubt zu bestimmen, wenn ein Zusammenhang-Schalter vorkommen sollte. Der Nachteil zur Vorkaufsnebenläufigkeit ist, dass das System einen Zusammenhang in einer unpassenden Zeit kann umschalten lassen, Schloss-Konvoi, Vorzugsinversion oder andere negative Effekten verursachend, die durch die kooperative Nebenläufigkeit vermieden werden können.
  2. Kooperative Nebenläufigkeit verlässt sich andererseits auf die Fäden selbst, um Kontrolle aufzugeben, sobald sie an einem anhaltenden Punkt sind. Das kann Probleme schaffen, wenn ein Faden auf eine Quelle wartet, verfügbar zu werden.

Bis zum Ende der 1990er Jahre hatten Zentraleinheiten in Tischcomputern viel Unterstützung für die Nebenläufigkeit nicht, obwohl Fäden noch auf solchen Computern verwendet wurden, weil die Schaltung zwischen Fäden schneller allgemein still war als volle Prozess-Zusammenhang-Schalter. Verarbeiter in eingebetteten Systemen, die höhere Voraussetzungen für Echtzeithandlungsweisen haben, könnten Nebenläufigkeit durch das Verringern der Zeit des Faden-Schalters, vielleicht durch das Zuteilen einer hingebungsvollen Register-Datei für jeden Faden unterstützen, anstatt eine allgemeine Register-Datei zu sparen/wieder herzustellen. Gegen Ende der 1990er Jahre hatte die Idee, Instruktionen von vielfachen Fäden gleichzeitig, bekannt als gleichzeitige Nebenläufigkeit durchzuführen, Arbeitsflächen mit dem Pentium von Intel 4 Verarbeiter, unter dem Namen hyper einfädelnd erreicht. Es ist von Intel Core und 2 Kernarchitekturen fallen gelassen gewesen, aber wurde später im Kern i5 und Kern i7 Architekturen wieder eingesetzt.

Kritiker der Nebenläufigkeit behaupten, dass die Erhöhung des Gebrauches von Fäden bedeutende Nachteile hat:

Prozesse, Kernfäden, Benutzerfäden und Fasern

Ein Prozess ist die "schwerste" Einheit der Kernterminplanung. Prozesse besitzen durch das Betriebssystem zugeteilte Mittel. Mittel schließen Gedächtnis, Dateigriffe, Steckdosen, Gerät-Griffe und Fenster ein. Prozesse teilen Adressräume oder Dateimittel außer durch ausführliche Methoden wie erbende Dateigriffe oder geteilte Speichersegmente nicht, oder dieselbe Datei auf eine geteilte Weise kartografisch darzustellen. Prozesse werden normalerweise Vorkaufs-stark mehrbeansprucht.

Ein Kernfaden ist die "leichteste" Einheit der Kernterminplanung. Mindestens ein Kernfaden besteht innerhalb jedes Prozesses. Wenn vielfache Kernfäden innerhalb eines Prozesses bestehen können, dann teilen sie dasselbe Gedächtnis und Dateimittel. Kernfäden werden Vorkaufs-stark mehrbeansprucht, wenn der Prozess-Planer des Betriebssystems Vorkaufs-ist. Kernfäden besitzen Mittel abgesehen von einem Stapel, einer Kopie der Register einschließlich des Programm-Schalters und mit dem Faden lokaler Lagerung (wenn irgendwelcher) nicht. Der Kern kann einen Faden jedem logischen Kern in einem System zuteilen (weil jeder Verarbeiter sich in vielfache logische Kerne aufteilt, wenn es Nebenläufigkeit unterstützt, oder unterstützen Sie nur einen logischen Kern pro physischen Kern, wenn es Nebenläufigkeit nicht unterstützt), und Fäden tauschen kann, die blockiert werden. Jedoch nehmen Kernfäden viel länger als zu tauschende Benutzerfäden.

Fäden werden manchmal in userspace Bibliotheken, so genannt Benutzerfäden durchgeführt. Der Kern ist von ihnen nicht bewusst, so werden sie geführt und in userspace vorgesehen. Einige Durchführungen stützen ihre Benutzerfäden oben auf mehreren Kernfäden, um aus Mehrverarbeiter-Maschinen (M:N Modell) einen Nutzen zu ziehen. In diesem Artikel der Begriff "Faden" (ohne Kern oder Benutzerqualifikator) Verzug zum Verweisen zu Kernfäden. Benutzerfäden, wie durchgeführt, durch virtuelle Maschinen werden auch grüne Fäden genannt. Benutzerfäden sind allgemein schnell, um zu schaffen und sich zu behelfen, aber können die Nebenläufigkeit oder Mehrverarbeitung nicht ausnutzen und blockiert werden, wenn alle ihre verbundenen Kernfäden blockiert werden, selbst wenn es einige Benutzerfäden gibt, die bereit sind zu laufen.

Fasern sind eine noch leichtere Einheit der Terminplanung, die kooperativ auf dem Plan stehen: Eine laufende Faser muss ausführlich "tragen", um einer anderen Faser zu erlauben, zu laufen, der ihre Durchführung viel leichter macht als Kern oder Benutzerfäden. Eine Faser kann auf dem Plan stehen, um in jedem Faden in demselben Prozess zu laufen. Das erlaubt Anwendungen, Leistungsverbesserungen durch das Handhaben der Terminplanung von sich zu gewinnen, anstatt sich auf den Kernplaner zu verlassen (der für die Anwendung nicht abgestimmt werden darf). Parallele Programmierumgebungen wie OpenMP führen normalerweise ihre Aufgaben durch Fasern durch.

Faden und Faser-Probleme

Parallelität und Datenstrukturen

Fäden in demselben Prozess teilen denselben Adressraum. Das erlaubt gleichzeitig laufendem Code, sich dicht zu paaren und Daten ohne die Gemeinkosten oder Kompliziertheit eines IPC günstig auszutauschen. Wenn geteilt, zwischen Fäden, jedoch, werden sogar einfache Datenstrukturen anfällig, um Gefahren laufen zu lassen, wenn sie mehr als eine Zentraleinheitsinstruktion verlangen zu aktualisieren: Zwei Fäden können damit enden zu versuchen, die Datenstruktur zur gleichen Zeit zu aktualisieren und es zu finden, unerwartet sich unter den Füßen ändernd. Durch Rasse-Gefahren verursachte Programmfehler können sehr schwierig sein, wieder hervorzubringen und zu isolieren.

Um das zu verhindern, APIs einfädelnd, bieten Synchronisationsprimitive wie mutexes an, um Datenstrukturen gegen den gleichzeitigen Zugang zu schließen. Auf uniprocessor Systemen muss ein Faden, der in einen geschlossenen mutex gerät, schlafen und folglich einen Zusammenhang-Schalter auslösen. Auf Mehrverarbeiter-Systemen kann der Faden stattdessen den mutex in einem spinlock befragen. Beide von diesen können Leistung entsaften und Verarbeiter in SMP Systemen zwingen, um den Speicherbus besonders zu kämpfen, wenn die Körnung der Blockierung fein ist.

Eingabe/Ausgabe und Terminplanung

Benutzerfaden oder Faser-Durchführungen sind normalerweise völlig in userspace. Infolgedessen ist Zusammenhang, der zwischen Benutzerfäden oder Fasern innerhalb desselben Prozesses umschaltet, äußerst effizient, weil es keine Wechselwirkung mit dem Kern überhaupt verlangt: Ein Zusammenhang-Schalter kann durch das lokale Sparen der Zentraleinheitsregister durchgeführt werden, die durch den zurzeit durchführenden Benutzerfaden oder die Faser und dann das Laden der Register verwendet sind, die durch den Benutzerfaden oder die durchzuführende Faser erforderlich sind. Da Terminplanung in userspace vorkommt, kann die Terminplanungspolitik leichter zu den Voraussetzungen des Arbeitspensums des Programms geschneidert werden.

Jedoch ruft der Gebrauch des blockierenden Systems Benutzerfäden herbei (im Vergleich mit Kernfäden), oder Fasern können problematisch sein. Wenn ein Benutzerfaden oder eine Faser einen Systemanruf durchführen, der blockiert, sind die anderen Benutzerfäden und Fasern im Prozess unfähig, bis zum Systemanruf-Umsatz zu laufen. Ein typisches Beispiel dieses Problems ist, wenn es Eingabe/Ausgabe durchführt: Die meisten Programme werden geschrieben, um Eingabe/Ausgabe gleichzeitig durchzuführen. Wenn eine Eingabe/Ausgabe-Operation begonnen wird, wird ein Systemanruf gemacht und kehrt nicht zurück, bis die Eingabe/Ausgabe-Operation vollendet worden ist. In der vorläufigen Periode wird der komplette Prozess durch den Kern "blockiert" und kann nicht laufen, der andere Benutzerfäden und Fasern in demselben Prozess von der Durchführung hungern lässt.

Eine allgemeine Lösung dieses Problems stellt eine Eingabe/Ausgabe-API zur Verfügung, die eine gleichzeitige Schnittstelle durch das Verwenden blockierungsfreier Eingabe/Ausgabe innerlich und die Terminplanung eines anderen Benutzerfadens oder Faser durchführt, während die Eingabe/Ausgabe-Operation im Gange ist. Ähnliche Lösungen können für andere blockierende Systemanrufe zur Verfügung gestellt werden. Wechselweise kann das Programm geschrieben werden, um den Gebrauch der gleichzeitigen Eingabe/Ausgabe oder die anderen blockierenden Systemanrufe zu vermeiden.

SunOS 4.x hat "Leichtgewichtsprozesse" oder LWPs durchgeführt. NetBSD 2.x +, und DragonFly BSD führen LWPs als Kern durch, fädelt (1:1 Modell) ein. SunOS 5.2 durch SunOS 5.8 sowie NetBSD 2 zu NetBSD 4 hat ein zwei Niveau-Modell durchgeführt, einen oder mehr Benutzerniveau-Fäden auf jedem Kernfaden (M:N Modell) gleichzeitig sendend. SunOS 5.9 und später, sowie NetBSD fädelt 5 beseitigter Benutzer Unterstützung ein, zu 1:1 Modell zurückkehrend. http://www.sun.com/software/whitepapers/solaris9/multithread.pdf hat FreeBSD 5 M:N Modell durchgeführt. FreeBSD 6 unterstützte sowohl 1:1 als auch M:N, Benutzer konnte wählen, den mit einem gegebenen Programm mit/etc/libmap.conf verwendet werden sollte. Das Anfangen mit FreeBSD 7, 1:1 ist der Verzug geworden. FreeBSD 8 nicht mehr Unterstützungen das M:N Modell.

Der Gebrauch von Kernfäden vereinfacht Benutzercode durch das Bewegen von einigen der kompliziertsten Aspekte des Einfädelns in den Kern. Das Programm braucht Fäden nicht zu planen oder ausführlich den Verarbeiter nachzugeben. Benutzercode kann in einem vertrauten Verfahrensstil, einschließlich Anrufe zum Blockieren von APIs geschrieben werden, ohne andere Fäden hungern zu lassen. Jedoch kann das Kerneinfädeln einen Zusammenhang-Schalter zwischen Fäden jederzeit zwingen, und so Rasse-Gefahren und Parallelitätsprogrammfehler ausstellen, die latent sonst lügen würden. Auf SMP Systemen wird das weiter verschlimmert, weil Kernfäden gleichzeitig auf getrennten Verarbeitern wörtlich durchführen können.

Modelle

1:1 (Kernniveau einfädelnd)

Vom Benutzer geschaffene Fäden sind in 1-1 Ähnlichkeit mit schedulable Entitäten im Kern. Das ist die einfachstmögliche einfädelnde Durchführung. Win32 hat diese Annäherung vom Anfang verwendet. Auf Linux führt die übliche C Bibliothek diese Annäherung (über den NPTL oder älteren LinuxThreads) durch. Dieselbe Annäherung wird von Solaris, NetBSD und FreeBSD verwendet.

N:1 (Benutzerniveau einfädelnd)

Ein N:1 Modell deutet an, dass das ganze Anwendungsniveau Karte zu einem einzelnen Kernniveau vorgesehene Entität einfädelt; der Kern hat keine Kenntnisse der Anwendungsfäden. Mit dieser Annäherung kann Zusammenhang-Schaltung sehr schnell und außerdem getan werden, es kann sogar auf einfachen Kernen durchgeführt werden, die das Einfädeln nicht unterstützen. Einer der Hauptnachteile ist jedoch, dass es aus der Hardware-Beschleunigung auf Mehrgewindeverarbeitern oder Mehrverarbeiter-Computern nicht einen Nutzen ziehen kann: Es gibt nie wieder als ein Faden, der zur gleichen Zeit auf dem Plan steht. Zum Beispiel: Wenn einer der Fäden eine Eingabe/Ausgabe-Bitte durchführen muss, wird der ganze Prozess blockiert, und der einfädelnde Vorteil kann nicht verwertet werden. Das GNU Tragbare Fäden verwendet einfädelndes Benutzerniveau.

M:N (Hybride einfädelnd)

M:N stellt eine N Zahl von Anwendungsfäden auf eine M Zahl von Kernentitäten, oder "virtuelle Verarbeiter kartografisch dar." Das ist ein Kompromiss zwischen Kernniveau ("1:1") und einfädelndem Benutzerniveau ("N:1"). Im Allgemeinen sind "M:N" Einfädeln-Systeme komplizierter, um durchzuführen, entweder als der Kern oder als die Benutzerfäden, weil Änderungen sowohl zum Kern-als auch zu Benutzerraumcode erforderlich sind. In der M:N Durchführung ist die einfädelnde Bibliothek dafür verantwortlich, Benutzerfäden auf den verfügbaren schedulable Entitäten zu planen; das macht Zusammenhang-Schaltung von Fäden sehr schnell, weil sie Systemanrufe vermeidet. Jedoch vergrößert das Kompliziertheit und die Wahrscheinlichkeit der Vorzugsinversion, sowie suboptimalen Terminplanung ohne umfassenden (und teuer) Koordination zwischen dem userland Planer und dem Kernplaner.

Durchführungen

Es gibt viele verschiedene und unvereinbare Durchführungen des Einfädelns. Diese schließen sowohl Kernniveau-als auch Benutzerniveau-Durchführungen ein. Jedoch folgen sie häufig mehr oder weniger nah der POSIX-Faden-Schnittstelle.

Kernniveau-Durchführungsbeispiele

  • Light Weight Kernel Threads (LWKT) in verschiedenem BSDs
  • M:N, der einfädelt
  • Native POSIX Thread Library (NPTL) für Linux, eine Durchführung der POSIX-Fäden (pthreads) Standard
  • Version 2.0 von Apple Multiprocessing Services und später, verwendet den eingebauten nanokernel in Mac OS 8.6 und später, der modifiziert wurde, um es zu unterstützen.
  • Windows von Microsoft von Windows 95 und Windows NT vorwärts.

Benutzerniveau-Durchführungsbeispiele

  • GNU tragbare Fäden
  • FSU Pthreads
  • Der Faden-Betriebsleiter von Apple Inc.
  • REALbasic (schließt eine API für den Konsumverein einfädelnd ein)
  • Tragbare Durchlaufzeit von Netscape (schließt eine Benutzerraumfaser-Durchführung ein)

Hybride Durchführungsbeispiele

  • Planer-Aktivierungen, die vom Eingeborenen von NetBSD POSIX verwendet sind, fädeln Bibliotheksdurchführung (ein M:N Modell im Vergleich mit 1:1 Kern oder userspace Durchführungsmodell) ein
  • Marcel aus dem PM2-Projekt.
  • Der OS für den Tera/Cray MTA
  • Windows 7 von Microsoft

Faser-Durchführungsbeispiele

Fasern können ohne Betriebssystembetreuung durchgeführt werden, obwohl einige Betriebssysteme oder Bibliotheken ausführliche Unterstützung für sie zur Verfügung stellen.

  • Win32 liefert eine Faser-API (Windows NT 3.51 SP3 und später)
  • Der Rubin als Green fädelt ein

Programmiersprache-Unterstützung

Viele in etwas Kapazität einfädelnde Programmiersprache-Unterstützung. Viele Durchführungen von C und C ++ stellen direkte Unterstützung nicht zur Verfügung, um selbstständig einzufädeln, aber stellen Zugang dem Eingeborenen zur Verfügung, der durch das Betriebssystem zur Verfügung gestellten APIs einfädelt. Ein höheres Niveau (und gewöhnlich böse Plattform) Programmiersprachen wie Java, Pythonschlange, und.NET, stellt das Einfädeln dem Entwickler aus, während es die Plattform spezifische Unterschiede im Einfädeln von Durchführungen in der Durchlaufzeit dem Entwickler abstrahiert. Mehrere andere Programmiersprachen versuchen auch, das Konzept der Parallelität zu abstrahieren und vom Entwickler zusammen (Cilk, OpenMP, MPI) einfädelnd. Einige Sprachen werden für den Parallelismus (Ateji PX, CUDA) entworfen.

Einige interpretierte Programmiersprachen wie Ruby und (die CPython Durchführung) Pythonschlange-Unterstützung einfädelnd, aber hat eine Beschränkung, die als Global Interpreter Lock (GIL) bekannt ist. Der GIL ist ein gegenseitiges Ausschluss-Schloss, das vom Dolmetscher gehalten ist, der den Dolmetscher daran verhindern kann, den Anwendungscode auf zwei oder mehr Fäden zur gleichen Zeit gleichzeitig zu interpretieren, der effektiv die Parallelität auf vielfachen Kernsystemen (größtenteils für Verarbeiter-gebundene Fäden, und nicht viel für netzgebundene) beschränkt.

Ereignis-gesteuerte Programmierhardware-Beschreibungssprachen wie Verilog haben ein verschiedenes einfädelndes Modell, das äußerst große Anzahl von Fäden unterstützt (um Hardware zu modellieren).

Siehe auch

  • Win32 Faden-Information blockiert
  • Hardware: Nebenläufigkeit (Computerhardware), Mehrkern (Computerwissenschaft), Gleichzeitige Nebenläufigkeit
  • Theorie: Folgende Prozesse, Computer stark mehrbeanspruchend, Nachricht mitteilend, die geht
  • Probleme: Faden-Sicherheit, Vorzugsinversion
  • Techniken: Protothreads, Faden-Lache-Muster, ohne Schlösser und warten - freie Algorithmen
  • Systemanrufe: Klon (Systemanruf von Linux)
  • David R. Butenhof: Mit POSIX-Fäden, Addison-Wesley, internationale Standardbuchnummer 0-201-63392-2 programmierend
  • Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farell: Pthreads Programmierung, O'Reilly & Associates, internationale Standardbuchnummer 1-56592-115-1
  • Charles J. Northrup: Mit UNIX-Fäden, John Wiley & Sons, internationale Standardbuchnummer 0-471-13751-0 programmierend
  • Mark Walmsley: Mehrgewindeprogrammierung in C ++, Springer, internationale Standardbuchnummer 1-85233-146-1
  • Paul Hyde: Javanische Faden-Programmierung, Sams, internationale Standardbuchnummer 0-672-31585-8
  • Bill Lewis: Faden-Zündvorrichtung: Ein Handbuch zur Mehrgewindeprogrammierung, Prentice Hall, internationale Standardbuchnummer 0-13-443698-9
  • Steve Kleiman, Devang Shah, Bart Smaalders: Mit Fäden, Presse von SunSoft, internationaler Standardbuchnummer 0-13-172389-8 programmierend
  • Pat Villani: Fortgeschrittene WIN32-Programmierung: Dateien, Fäden, und Prozess-Synchronisation, Harpercollins Herausgeber, internationale Standardbuchnummer 0-87930-563-0
  • Jim Beveridge, Robert Wiener: Nebenläufigkeitsanwendungen in Win32, Addison-Wesley, internationale Standardbuchnummer 0-201-44234-5
  • Thuan Q. Pham, Pankaj K. Garg: Mehrgewindeprogrammierung mit Windows NT, Prentice Hall, internationaler Standardbuchnummer 0-13-120643-5
  • Len Dorfman, Marc J. Neuberger: Wirksame Nebenläufigkeit in OS/2, dem McGraw-Hügel Osborne Medien, internationale Standardbuchnummer 0-07-017841-0
  • Alan Burns, Andy Wellings: Parallelität in ADA, Universität von Cambridge Presse, internationale Standardbuchnummer 0 521 62911 X
  • Uresh Vahalia: Unix Internals: die Neuen Grenzen, Prentice Hall, internationale Standardbuchnummer 0-13-101908-2
  • Alan L. Dennis:.Net-Nebenläufigkeit, Manning Publications Company, internationale Standardbuchnummer 1-930110-54-5
  • Tobin Titus, Fabio Claudio Ferracchiati, Srinivasa Sivakumar, Tejaswi Redkar, Sandra Gopikrishna: C# das Einfädeln des Handbuches, Peer Information Inc, internationale Standardbuchnummer 1-86100-829-5
  • Tobin Titus, Fabio Claudio Ferracchiati, Srinivasa Sivakumar, Tejaswi Redkar, Sandra Gopikrishna: Visueller Grundlegender.Net das Einfädeln des Handbuches, Wrox Press Inc, internationale Standardbuchnummer 1-86100-713-2

Links


Heiliger Rosalia / Algebra von Clifford
Impressum & Datenschutz