Überlegungen zu Multitasking
Die empfohlene Richtlinie besteht darin, so wenige Threads wie möglich zu verwenden, wodurch die Verwendung von Systemressourcen minimiert wird. Dadurch wird die Leistung verbessert. Multitasking weist Ressourcenanforderungen und potenzielle Konflikte auf, die beim Entwerfen Ihrer Anwendung berücksichtigt werden müssen. Die Ressourcenanforderungen sehen wie folgt aus:
- Das System belegt Arbeitsspeicher für die Kontextinformationen, die von Prozessen und Threads benötigt werden. Daher ist die Anzahl der Prozesse und Threads, die erstellt werden können, durch den verfügbaren Arbeitsspeicher beschränkt.
- Die Verfolgung einer großen Anzahl von Threads verbraucht erhebliche Prozessorzeit. Wenn zu viele Threads vorhanden sind, können die meisten davon keine signifikanten Fortschritte machen. Befinden sich die meisten der aktuellen Threads in nur einem Prozess, werden Threads in anderen Prozessen seltener eingeplant.
Die Bereitstellung eines gemeinsamen Zugriffs auf Ressourcen kann zu Konflikten führen. Um sie zu vermeiden, müssen Sie den Zugriff auf freigegebene Ressourcen synchronisieren. Dies gilt für Systemressourcen (z. B. Kommunikationsports), Ressourcen, die von mehreren Prozessen gemeinsam genutzt werden (z. B. Dateihandles) oder die Ressourcen eines einzelnen Prozesses (z. B. globale Variablen), auf die von mehreren Threads zugegriffen wird. Wenn der Zugriff nicht ordnungsgemäß synchronisiert wird (in demselben oder in unterschiedlichen Prozessen), kann dies zu Problemen wie Deadlock- und Racebedingungen führen. Die Synchronisierungsobjekte und -funktionen, die Sie verwenden können, um die Ressourcenfreigabe zwischen mehreren Threads zu koordinieren. Weitere Informationen zur Synchronisierung finden Sie unter Synchronisieren der Ausführung mehrerer Threads. Wenn Sie die Anzahl der Threads verringern, ist es einfacher und effektiver, Ressourcen zu synchronisieren.
Ein guter Entwurf für eine Multithreadanwendung ist der Pipelineserver. In diesem Entwurf erstellen Sie einen Thread pro Prozessor und erstellen Warteschlangen von Anforderungen, für die die Anwendung die Kontextinformationen verwaltet. Ein Thread verarbeitet alle Anforderungen in einer Warteschlange, bevor Anforderungen in der nächsten Warteschlange verarbeitet werden.