Die häufigsten Fragen, die kürzlich im Interview gestellt wurden, sind das IO -Feld. Einige von ihnen wurden beantwortet, während einige von ihnen nicht gut geantwortet haben. Vor kurzem habe ich begonnen, mehr über einige dieser Dinge zu erfahren und möchte sie zusammenfassen.
Frontpunkt
1. Benutzerraum System Speicherplatz
Das Linux -System unterteilt einen Prozess in zwei Räume, Benutzerraum und Systemraum. Zum Beispiel ist unsere normale Codierung alles Benutzerbereich. Wenn wir Systemfunktionen wie das Kopieren von Systemdateien aufrufen müssen, müssen wir Systemkomponenten aufrufen, Kerneldienste erhalten und Vorgänge abschließen.
Zwei Phasen von IO
Der IO -Ausführungsprozess ist in zwei Phasen unterteilt und wartet auf bereit für die Ausführung von Kopien
Wartenbereit: Wir wissen, dass die Daten, wenn wir IO -Vorgänge ausführen, aus anderen Anwendungen oder Netzwerken stammen. Wenn es keine Daten gibt, wartet das Betriebssystem darauf. Zu diesem Zeitpunkt kann die Anwendung auch auf das Kopieren warten: Kopieren Sie die Daten in den Anwendungsarbeitsbereich
Blockierend und nicht blockiert, synchron und asynchron
Lassen Sie uns zuerst über Synchronisation und Asynchronität sprechen. Am einfachsten ist es zu sehen, ob ein Thread oder Prozess begonnen wird, das IO zu vervollständigen. Beim Synchronisieren von IO bleibt das System an und wartet darauf, dass dies beendet wird, bevor es andere Dinge tut. Asynchronous IO verwendet die Multi-Threading-Methode, um dazu einen neuen Thread zu starten, und Sie können andere Dinge tun und auf Benachrichtigungen warten.
Lassen Sie uns über Blockierung und Nichtblockierung sprechen. Diese beiden Dinge konzentrieren sich tatsächlich auf den Zustand des Programms, wenn Sie auf das Anrufergebnis warten. Blockieren bedeutet, dass Sie beim Erhalten dieses Ergebniss hängen, bis Sie auf das vollständige Ergebnis warten. Nicht blockierende bedeutet, dass, wenn der Prozess das Ergebnis nicht erzielen kann, keinen blockierenden Faden gibt. Das ist ein bisschen verwirrt. Es gibt eine gemeinsame Erklärung. Wenn es blockiert, möchte ich dieses Ding bekommen. Während des Erwerbsprozesses verliere ich die CPU. Ich werde die CPU erst das Ergebnis bekommen. Wenn ich jedoch nicht blockiere, werde ich die CPU weiterhin halten und kann sie immer noch überprüfen.
Mehrere IO -Modelle
Derzeit gibt es 5 Typen
Blockieren io
Der traditionellste IO -Typ, das heißt, Lesen und Schreiben werden blockieren
Nicht blockierende IO
Wenn der Benutzer die Lektüre initiiert, verliert er die CPU nicht, sondern überprüft weiter. Wenn es nicht erfolgreich ist, wird ein Fehler zurückgegeben. Wenn es ein erfolgreiches Signal empfängt, wird ein Lesevorgang initiiert, um das vollständige Ergebnis zu erhalten.
Multiplexing io
Dies ist der Kern von Java Nio. Es wird einen Thread geben, der den Status mehrerer Steckdosen verwaltet, um zu prüfen, ob Sie bereit sind. Nur wenn Sie feststellen, dass Sie wirklich bereit sind, rufen Sie die CPU an, um IO -Operationen auszuführen. Das ist wichtiger
Signalantrieb IO
Verwenden Sie weniger, ignorieren Sie
Asynchrone IO
Holen Sie sich einen Thread zum Ausführen