Der Linux-Kernel verwendet eine verknüpfte Liste für TCP und eine RB-Struktur für die Prozessplanung.Warum verwendet der Linux-Kernel die Datenstrukturen, die er ausführt?
In Bezug auf die algorithmische Effizienz sind diese sinnvoll. Sie werden eine Reihe von Paketen nacheinander erhalten, so dass O (1) Einfügen am Ende der Liste nett ist.
Bei der Prozessterminierung verwendet der Completely Fair Scheduler einen Rot-Schwarz-Baum mit O (1) Zeit, um Aufgaben auszuwählen.
Soweit ich weiß, sind diese beiden nicht 'flach' implementiert - die verkettete Liste ist eine Gruppe von Knoten mit Zeigern zu anderen Knoten, genau wie der Baum. Das bedeutet, dass die Lokalität für diese Strukturen, soweit ich weiß, schlecht sein sollte.
Von dem, was ich gesehen habe Cache überwiegt oft algorithmische Effizienz.
Gibt es etwas über den Datensatz, für den Linux programmiert ist, der die algorithmische Effizienz dieser Strukturen die Cache-Effizienz anderer überwiegt?
Habe ich etwas falsch verstanden? Hat jemand profiliert?
Herr Torvalds, was ist Ihre Antwort? –
Die Größe der Cache-Leitung variiert stark zwischen den Architekturen. – Joshua
Wahr. Aber optimiert der Kernel wirklich für ein rein flaches Speichermodell? – hungerstrike