Wenn ein Prozess Daten über einen Socket an einen anderen Prozess auf demselben Computer sendet, wie wahrscheinlich ist es, dass während der Übertragung ein Lese-/Schreibzugriff auf die Festplatte erfolgt? Es scheint einen Socket-Dateityp zu geben, sind diese garantiert im Speicher, vorausgesetzt, es gibt freien Speicher?Beinhaltet Socket IO Disk IO?
Antwort
Nicht direkt. TCP/UDP-Netzwerk-Sockets, über localhost oder ein UNIX-Domain-Socket funktionieren im Speicher. UNIX Domain Sockets sind in der Regel die schnellste Möglichkeit, außerhalb des Kernelbereichs mit einem Modul zu arbeiten.
Sockets über localhost-Pipes sind fast so einfach wie ein paar Memcpys zwischen Userspace und Kernel-Space und zurück. Im TCP-Fall haben Sie den Stack-Overhead.
Beide Dateien und Sockets teilen die Kernel-Abstraktion der Deskriptor-Tabelle, aber das bedeutet keine tatsächliche Datei.
Natürlich kann die Datenbank als Ergebnis Ihrer Transaktion einige Schreibvorgänge in ein Protokoll auslösen.
Im POSIX-Modell sowie in vielen anderen Kerneln befinden sich Dateien nicht nur auf Festplatten. Stattdessen wird jedes Gerät durch eine "spezielle Datei" repräsentiert. Sie leben in Verzeichnissen oder in einer Art Namespace, aber der Zugriff darauf ist kein Festplattenzugriff, selbst wenn sie in einem Verzeichnis auf der Festplatte gespeichert sind.
Wenn Sie Speicherdruck haben, können einige Ihrer Datenpuffer ausgelagert werden. Aber das hat nichts mit der "Datei" von Geräten zu tun. Es verwendet nur die Festplatte als zusätzlichen RAM.
Also "Ja, Socket-I/O ist Datei-I/O, aber nicht Datenträger Lesen/Schreiben."
Grabbing der "Design des 4.4BSD Betriebssystems", die beschreibt, was als die Referenzimplementierung, Abschnitte 11.2 "Implementierungsstruktur" und 11.3 "Speicherverwaltung" und in der Abwesenheit von extremen Speicherdruck, es scheint um sicherzustellen, dass bei der Übertragung keine Platten-E/A beteiligt sind.
Die übertragenen Daten werden in speziellen Strukturen, mbufs und mbuf-Clustern gespeichert, Daten werden an jedem Ende jedes Puffers direkt hinzugefügt oder entfernt. Wahrscheinlich werden die gleichen Puffer immer wieder verwendet, werden in einen bestimmten Pool freigegeben und dann von dort neu zugewiesen. Frische Puffer werden vom Kernel-malloc-Pool zugewiesen, der nicht ausgetauscht werden kann. Das Wachstum der Anzahl von Puffern wird offensichtlich nur auftreten, wenn der Verbraucher langsam und bis zu einer Grenze ist.
Einfach gesagt, was die Daten betrifft, werden diese Puffer in der Referenzimplementierung nicht durch Dateien gesichert, geschweige denn durch eine Datei im Dateisystem, in der der Inode platziert ist wenn es extrem unwahrscheinlich ist, ausgelagert zu werden.
Dies lässt nur Metadaten und Statusinformationen aus, die sich möglicherweise auf dem Inode befinden. Natürlich, Inode-Erstellung und Nachschlagen wird Festplattenzugriff verursachen. Was den Status angeht, ist alles, was ich mir vorstellen kann, ein Zeitvertreib.
Ich kann keine autorisierenden Informationen über Atime auf UNIX-Domain-Sockets finden. Aber ich habe es mit FreeBSD und Linux versucht und alle vier Dateizeiten wurden immer als Inode-Erstellungszeit beibehalten. Selbst das Einrichten einer zweiten Verbindung zu einem UNIX-Domänen-Socket scheint nicht aktualisiert zu werden.
- 1. Winkel-socket-io io ist nicht
- 2. Socket io Code verwirrend
- 3. Socket IO erneut verbinden?
- 4. Sailsjs Socket IO
- 5. Socket IO Query Parameter
- 6. So nutzen Sie die Disk IO-Warteschlangenfunktion
- 7. Disk IO Problem mit zirkulären Datei schreibt
- 8. android browser und socket io
- 9. Java IO, Socket-Server-Adresse
- 10. Socket io mit nodejs benutzerdefinierten Socket-IDs
- 11. Haskell, wie IO IO Monad
- 12. Socket io auf Verbindung nicht verbinden NodeJS
- 13. Jstree Lazy Loading mit Socket IO
- 14. Problem mit IO :: Socket TCP-Verbindung
- 15. Socket io Instanz/Middleware in Express
- 16. Socket IO nur Session nicht persistent
- 17. Programmatisch pro-process Disk-io-Statistiken auf Windows bekommen?
- 18. Socket io: Wie Parameter an disconnet Socket-Ereignis übergeben?
- 19. Haskell Monade: IO [Double] bis [IO Double]
- 20. Filter IO [Maybe String] zu IO [String]
- 21. Warum gibt es eine verschachtelte IO-Monade, IO (IO()), als Rückgabewert meiner Funktion?
- 22. , was der Unterschied zwischen Speicher gemappt io ist und io io
- 23. socket io Benutzerverbindung hinzugefügt auf jeder HTML-Seite aktualisieren?
- 24. NodeJS-Socket-IO-Stop-emittiert nach dem Zufallsprinzip?
- 25. Reagieren js Socket io funktioniert nicht im lokalen Netzwerk wifi
- 26. Socket-IO nicht an Server verbunden sind flink mit
- 27. Senden einer Nachricht an bestimmte Client in Socket IO
- 28. Kann ich Service-Mitarbeiter mit socket-io verwenden?
- 29. Zeichnen einer d3 Echtzeit-Liniendiagramm in socket.on (Socket IO)
- 30. So erkennen Sie das Wiederverbindungsereignis in Socket IO
Können Sie bitte Ihren Entwurf und Ihre Anforderung näher ausführen? –
Es gibt nicht wirklich ein bestimmtes Design. Ich versuche, die Leistung einer flachen Datei cms wie Pico gegen etwas Ähnliches zu messen, das eine alles in Gedächtnis Datenbank wie redis benutzt. Ich erinnere mich, vor Jahren in einem MSDN-Artikel über Winsock gelesen zu haben, dass eine Datei verwendet wurde, um Posix zu implementieren. Zumindest erinnere ich mich daran, dass ich eine vage Vorstellung hatte, dass auf manchen Systemen vielleicht ein Diskettenschreibvorgang auftreten könnte.Denn wenn während der IPC ein blockierender Plattenschreibvorgang auftritt, ist das Spiel für jede Datenbank in Bezug auf die Geschwindigkeit vorbei, selbst wenn das Ganze im Speicher ist. – Kaan
@Kaan Ich schlage vor, Sie finden Ihre Quelle und lesen Sie es erneut. Deine Erinnerung scheint dich enttäuscht zu haben. – EJP