Programme stehen in Konflikt, wenn beide versuchen, dieselbe Ressource zu verwenden. Wenn mehrere Programme gleichzeitig versuchen, mit einer Ressource zu arbeiten, besteht die Gefahr von Parallelitätsprobleme . Parallelitätsprobleme treten auf, wenn ein Prozess eine Änderung an der Ressource vornimmt und das andere Programm (das in der Mitte seine eigene Änderung an der Ressource durchführte) diese nicht kennt und daher nicht in der Lage ist.
Hier sind ein paar Beispiele für Parallelitätsprobleme im Lehrbuch.
Last-in-Wins-Problem
Stellen Sie sich vor, Sie verwenden ein FTP-Verzeichnis, um ein Dokument gemeinsam zu nutzen, bei dem Sie und ein Kollege an einem Dokument zusammenarbeiten. Sie laden das Dokument herunter, bearbeiten es und stellen es erneut bereit, ebenso wie Ihr Kollege.
- Sie laden das Dokument herunter und beginnen eine Reihe von Änderungen, die 1 Stunde dauern.
- Ihr Kollege lädt das Dokument zur gleichen Zeit herunter, zu der Sie es getan haben. Es dauert jedoch nur eine halbe Stunde, um die Änderungen abzuschließen und erneut zu laden.
Ergebnis: Wenn Sie Ihr Dokument hochladen, überschreiben Sie deren Änderungen und sie gehen verloren.
Veraltete Daten
In demselben Szenario nimmt Ihr Kollege einige Änderungen vor, die Sie benötigen, ohne es Ihnen mitzuteilen. Ihre Kopie der Datei hat keine Änderungen,
Ergebnis: Sie schreiben die gleichen Änderungen in etwas anderen Wörtern selbst, oder, noch schlimmer,, eine unangenehme E-Mail darüber, wie sie fehlt.
Dies scheint ein einfaches Szenario zu sein, aber in fortgeschrittenen Fällen wie Datenbanken mit mehreren Zugriffen, wenn Sie Datensätze in derselben Millisekunde auswählen, von denen jemand sie aktualisiert, können ernsthafte Probleme auftreten.
Schlechte Berechnung
Ein Ehepaar hat ein gemeinsames Bankkonto und Geldautomatenkarten. Sie haben 1000 USD auf ihrem Konto. In ihrem täglichen Leben sind sie auf der anderen Seite der Stadt und beide greifen im selben Moment auf den Geldautomaten zu. Sie ziehen beide 1000USD zurück. Die Geldautomaten wissen beide, dass der Saldo 1000 ist, also erlauben sie das Abheben und schreiben dann in die zentrale Datenbank, dass der neue Saldo 0 ist.
Ergebnis: Die Bank hat jetzt 1000USD und weiß es nicht einmal.
In all diesen Beispielen gab es mehrere Parteien, die ungefähr oder zur gleichen Zeit Aktionen für eine gemeinsam genutzte Ressource ausführten. Daher die Begriffe "Parallelität" oder "Synchronizität".
Lösungen
Es gibt einige Möglichkeiten, um mit diesen Problemen umzugehen. Eine ist die Verwendung von Software, die zwischen den mehreren Parteien, die auf die Ressource zugreifen, eine Entscheidung trifft. Diese Arbiter-Programme haben je nach Umfang und Vorhersagbarkeit der Operationen zwei Optionen:
- Führen Sie die Vorgänge intelligent zusammen
- Sperren / sperren Sie eine der beiden Operationen, bis die erste, die bemerkt wird, abgeschlossen ist.
Es ist auch möglich zu sperren / sperren, vorausgesetzt, dass beide Programme ein freigegebenes Flag prüfen, das den Status der Ressource angibt. Dies erfordert im Allgemeinen eine kundenspezifische Entwicklung.
Deine Antwort
In Ihrem speziellen Fall sind die Ressourcen die Dateien auf Ihrer Festplatte.
Die Synchronizität stammt von Ereignissen wie Datei-Lesen / Schreiben, die bei beiden AV-Programmen On-Access-Scans auslösen.
Windows fungiert als Arbiter zum Beheben von Parallelitätsproblemen des Dateisystems durch Sperren von Dateien wenn Programme sie für bestimmte Operationen öffnen.
Dies bedeutet, dass beide Programme auf die Datei zugreifen und wer zuerst dort ankommt, erhält die Sperre. Auf einem niedrigen Niveau führt dies zu einem Platten-Thrashing, da beide Programme ihre eigenen E / A-Aktivitäten starten, wodurch die Hardware beide Aufgaben getrennt ausführen muss, die IO-Anweisungen jedoch verschachtelt werden, was beides viel weniger effizient macht und letztendlich nur eine von ihnen wird gewinnen. Der andere wird sich drehen und warten, bis er sein eigenes Schloss aufbauen kann.