Unter Windows und Linux werden Aufgaben auf einfachen Threads ("leightweight threads"), die auch als Fasern ("fibers") bezeichnet werden, ausgeführt. Fasern ermöglichen es auf Threads laufenden Aufgaben, den Zeitplan kooperativ untereinander festzulegen, anstatt sich auf den Betriebssystem-Scheduler zu verlassen. Dies führt dazu, dass ein Kontextwechsel zwischen Fasern viel weniger kostenträchtig als ein Thread-Kontextwechsel ist, da es keine Interaktion mit dem Betriebssystem-Kernel bzw. -Scheduler gibt. In Anwendungen mit mehrfachen Threads, die häufige Thread-Kontextwechsel durchführen, kann die Verwendung von Fasern die Performance und Skalierbarkeit dramatisch steigeren.
Da Fasern nicht vom Betriebssystem-Scheduler abhängen, muss eine Faser die Kontrolle an eine andere Faser explizit übergeben, wenn sie auf den Abschluss einer anderen Aktivität wartet. Wenn z.B. eine auf einer Faser ausführende Aufgabe blockiert, während sie auf den Abschluss eines I/O-Vorgangs wartet, übergibt sie die Kontrolle an eine andere Faser. Der Thread, der die ursprüngliche Faser ausführt, kann unmittelbar eine andere Faser entgegennehmen und ihre Ausführung ohne einen Kernel-Kontextwechsel beginnen. Wenn eine Faser blockiert und die Kontrolle nicht übergibt, blockiert sie den Thread, der sie beherbergt, und hindert damit andere Fasern daran, auf diesem Thread zu laufen. Wenn mehr als ein Thread Fasern beherbergt, wird nur der Thread, der die wartende Faser beherbergt, blockiert: Andere Threads können weiterhin Fasern verarbeiten.
Auf Plattformen, die Fasern unterstützen, werden zumindest so viele Fasern erstellt, wie es die Einstellung für die maximale Parallelität des Servers erfordert (durch die Option -gn angegeben). Der Server kann mehr als in diesem Wert festgelegte Fasern erstellen, damit immer eine Faser zum Ausführen von internen Serveraufgaben zur Verfügung steht. Weitere Hinweise finden Sie unter Serveroption -gn.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |