Eine eingehende überprüfung von Blockchain – Kryptografie und Metaverse (Teil Vier– Parallelit?t-Concurrency-Teil Vier)
Mor Monshizadeh
Co-Founder & CTO at Mondial AI | The best inventor of the world 2013(Hong Kong-HKSTP)
In diesem Artikel werde ich weitere Themen im Zusammenhang mit Blockchain, Krypto und Web 3 diskutieren.
Semaphoren:
Was ist ein Semaphor?
Ein Zeiger oder Semaphor ist eine Variable, die in nebenl?ufigen Umgebungen verwendet wird, um den Zugriff von Prozessen auf gemeinsam genutzte Ressourcen zu steuern. Das Semaphor kann bin?r sein, was nur zwei Werte hat, True und False, oder ein Z?hler von ganzen Zahlen. Die Semaphore wird verwendet, um eine Konkurrenzsituation zwischen Prozessen zu verhindern. Auf diese Weise wird sichergestellt, dass nur ein Prozess Zugriff auf die gemeinsame Ressource hat und von ihr lesen oder schreiben kann.
Semaphoren wurden erstmals von dem niederl?ndischen Informatiker Edsker Dykstra eingeführt und sind heute in Betriebssystemen weit verbreitet.
Angenommen, eine Bibliothek hat 10 identische Leses?le. Um Streitigkeiten zu vermeiden, sollten Studierende, die ein Studium beabsichtigen, ein Zimmer an einem Schalter anfordern. Wenn ein Student mit seinem Studium fertig ist und das Zimmer abgeben m?chte, muss er zurück zum Tresen gehen und zeigen, dass er das Zimmer nicht mehr ben?tigt. Wenn keine Zimmer verfügbar sind und alle Zimmer bereits belegt sind, müssen die Studierenden warten, bis einer der Studierenden ihr Zimmer übergibt. Dann kann der Student, der im Vergleich zu den anderen die h?chste Priorit?t hat (zB früher angekommen ist als die anderen), das frei gewordene Zimmer w?hlen.
Das Grundprinzip besteht darin, dass zwei oder mehr Prozesse durch einfache Signale miteinander kommunizieren k?nnen. Jeder Prozess kann an einem bestimmten Ausführungspunkt gestoppt werden und seine Ausführung kann verhindert werden, bis ein bestimmtes Signal eintrifft. Um diesen Effekt zu erzeugen, werden spezielle Variablen namens Semaphore verwendet.
Jeder Prozess, der auf die freigegebene Ressource zugreifen m?chte, führt Folgendes aus:
überprüft den Semaphorwert.
Wenn der Wert des Semaphors positiv ist, kann der Prozess die gemeinsam genutzte Ressource verwenden. In diesem Fall dekrementiert der Prozess eine Einheit des Semaphors, um anzuzeigen, dass eine Einheit die gemeinsam genutzte Ressource verwendet hat.
Wenn der Wert des Semaphors null oder kleiner als null ist, ruht der Prozess, bis der Semaphor einen positiven Wert annimmt. In diesem Fall wacht der Prozess auf und beginnt bei Schritt eins.
Wenn der Prozess die Arbeit mit der Ressource beendet hat, wird dem Semaphor eine Einheit hinzugefügt. Immer wenn der Semaphor-Wert null oder mehr erreicht, wird einer der schlafenden Prozesse durch das Betriebssystem zuf?llig oder in einer FIFO-Weise aufgeweckt. In diesem Fall übernimmt der aufgeweckte Prozess sofort die Ressource und dekrementiert nach Abschluss der Arbeit wieder eine Einheit von der Semaphore. Wenn der Wert des Semaphors Null ist und es mehrere blockierte Prozesse darin gibt, bleibt der Wert des Semaphors durch Erh?hen des Semaphors um eine Einheit Null, aber einer der blockierten Prozesse wird freigegeben.
Die Semaphore hat viele Anwendungen im Betriebssystem und in einigen Software- und Webservern, obwohl die Wahrscheinlichkeit, dass ein Problem aufgrund einer Fehlfunktion im Semaphorabschnitt auftritt, sehr gering und unbedeutend ist und viele Menschen nicht einmal mit dem Namen der Semaphore vertraut sind , aber das Auftreten einer Fehlfunktion in der Semaphore oder das Versagen der Semaphore, ordnungsgem?? zu funktionieren, kann den gesamten Betrieb eines Betriebssystems oder zugeh?riger Software st?ren.
Mein Ziel bei der Definition von Semaphor war nicht, tief in die Nebenl?ufigkeit einzusteigen, sondern zu zeigen, dass Informatiker Semaphor entworfen und gebaut haben, um Nebenl?ufigkeitsprobleme zu reduzieren oder zu eliminieren.
zum Beispiel : Bei Metamondial haben wir etwas ?hnliches wie ein Semaphor entwickelt, das Synchronisationsprobleme in dezentralen Netzwerken eliminiert und die Probleme l?st, dass w?hrend umfangreicher P2P-Kommunikation keine Informationen gespeichert oder empfangen werden.
Angenommen, 2 Computer m?chten einen Teil einer Funktion gleichzeitig ausführen, oder beide führen eine Funktion aus oder führen 2 verwandte Funktionen aus.Wenn wir über P2P-Kommunikation sprechen, k?nnen wir uns vorstellen, dass jeder unserer Computer einen Kern hat eine CPU, die das Programm parallel ausführt, aber leider ist die Geschwindigkeit dieser beiden Kerne nicht gleich... Hier setzt unser Algorithmus an und erzeugt eine Art parallelen Prozess, der in den folgenden Abschnitten behandelt wird Erkl?re mehr.
Technisches Wissen und Kenntnisse des Infrastrukturdesigns erm?glichen es, die optimalsten und schnellsten Systeme zu bauen, die die Hauptanforderungen an Datenübertragungs- oder Finanznetzwerke sind.
Das Producer-Consumer Problem:
In der Informatik ist das Producer-Consumer- oder das Limited-Buffer-Problem ein klassisches Beispiel für ein Mehrprozess-Synchronisationsproblem.
Die erste Version wurde 1965 von Dykstra als unver?ffentlichtes Manuskript mit unbegrenztem Puffer vorgeschlagen und sp?ter 1972 mit begrenztem Puffer ver?ffentlicht. In der ersten Version des Problems gab es zwei zyklische Prozesse namens Producer und Consumer, die sich einen gemeinsamen Puffer fester Gr??e in Form einer Warteschlange teilten. Der Producer generiert wiederholt Daten und legt sie im Puffer ab. Der Verbraucher liest wiederholt Daten aus dem Puffer, verwirft sie nach dem Lesen und verwendet die Daten auf irgendeine Weise. In der ersten Version des Problems, die einen unbegrenzten Puffer hatte, ging es darum, einen Producer- und Consumer-Code so zu gestalten, dass beim Datenaustausch zwischen ihnen keine Daten verloren gehen oder dupliziert werden und die Daten vom gelesen werden Verbraucher in Auftrag, vom Hersteller geschrieben, und beide Prozesse haben die maximal m?gliche Verbesserung. In einer weiteren Formulierung des Problems schlug Herr Dykstra mehrere Erzeuger und Verbraucher vor, die sich einen endlichen Satz von Puffern teilen. Dadurch entstand ein weiteres Problem, wie verhindert werden kann, dass Erzeuger in Puffer schreiben, die vollst?ndig voll sind, und wie verhindert werden kann, dass Verbraucher Puffer lesen, wenn alle Puffer leer sind.
Das erste, was zu berücksichtigen ist, ist, dass es einen Erzeuger und einen Verbraucher und einen Puffer endlicher Gr??e gibt. Wenn der Puffer voll ist, hat der Produzent zwei M?glichkeiten: entweder schlafen gehen oder die Daten verwerfen. Wenn der Verbraucher das n?chste Mal einen Data aus dem Puffer entfernt, benachrichtigt er den Produzenten, damit er erneut mit dem Füllen des Puffers beginnen soll.
Wenn der Verbraucher erkennt, dass der Puffer leer ist, geht er in den Ruhezustand(Schlafmodus). Das n?chste Mal, wenn der Erzeuger Daten in den Puffer legt, weckt er den Verbraucher auf. Diese L?sung ist m?glich, indem eine Kommunikation zwischen Prozessen verwendet wird, die normalerweise Semaphore verwendet. Wenn die Aufl?sung nicht ausreicht, kann dies zu einem Deadlock führen, bei dem beide Prozesse auf das Aufwachen warten.
Unzureichende Umsetzung:
Um dieses Problem zu l?sen, besteht die Versuchung, die folgende L?sung zu verwenden. In dieser L?sung werden zwei Bibliotheksroutinen namens sleep und wakeup verwendet. Wenn sleep aufgerufen wird, blockiert der Aufrufer, bis ihn ein anderer Prozess mithilfe der Wakeup-Routine aufweckt. Die globale Variable itemcount enth?lt die Anzahl der Elemente im Puffer.
dure consumer(
{
?while (true)
?{
?if (itemCount == 0)
?{
?sleep();
?}
?item = removeItemFromBuffer();
?itemCount = itemCount - 1;
?if (itemCount == BUFFER_SIZE - 1)
?{
?wakeup(producer);
?}
?consumeItem(item);
?}
})
Das Problem bei dieser L?sung ist, dass sie Race Conditions enth?lt, die zu Deadlocks führen k?nnen. Betrachten Sie das folgende Szenario:
Der Verbraucher hat gerade die itemcount-Variable gelesen, festgestellt, dass ihr Wert Null ist, und m?chte den if-Block eingeben.
Kurz bevor der Schlaf aufgerufen wird, wird der Verbraucher unterbrochen und der Erzeuger wieder aufgenommen,der Erzeuger erstellt ein Element und legt es in den Puffer und erh?ht den itemcount-Wert, da der Puffer vor dem letzten Zustand leer war, versucht der Erzeuger, den Verbraucher aufzuwecken.
Leider schl?ft der Konsument noch nicht, der Weckruf wird also verpasst. Wenn der Benutzer fortf?hrt, schl?ft er wieder ein und wacht nie wieder auf. Denn der Konsument wird erst dann vom Producer geweckt, wenn itemcount gleich eins ist.
Der Producer tritt in die Schleife ein, bis der Puffer voll ist, und geht dann auch schlafen.Da beide Prozesse für immer schlafen gehen, geraten wir unweigerlich in einen Deadlock; Daher ist diese L?sung unerwünscht.
Eine andere Analyse ist, dass, wenn die Programmiersprache des semantischen Protokolls keine gleichzeitigen Zugriffe auf gemeinsam genutzte Variablen (in diesem Fall Itemcount) durch Synchronisation definiert, die verwendete L?sung daher unerwünscht ist und nicht bewiesen werden muss.Es ist eindeutig keine Konkurrenzsituation.
Auch hier fragen Sie sich, was das mit Blockchain oder Kryptow?hrung zu tun hat?
Probleml?sung ist in der Welt der Informatik sehr wichtig, viele Probleme müssen sehr wissenschaftlich und mit umfangreicher Forschung gel?st werden, aber die Eile und intellektuelle Unreife der aktuellen Blockchain-Sch?pfer hat viele Probleme geschaffen.
Bis ich Hedera traf, dachte ich, dass es keine Hoffnung für die Welt der Kryptow?hrung und Dezentralisierung gibt, aber glücklicherweise sind einige Leute mit wissenschaftlichen Ansichten aufgetaucht.
Bei Metamondial haben wir mit mehr als 2 Jahren Forschung die Grundlage für das Programmieren und Entwerfen von Netzwerken und Infrastrukturen geschaffen.
In den n?chsten Zeilen erfahren Sie, wie wichtig die Rolle der Parallelit?t in der Welt der Kryptow?hrung und Blockchain ist.
Das Design der Blockchain- oder Virtual-Machine-Computing-Schicht und der Smart-Contract-Ausführungsschicht sollte so gestaltet sein, dass m?glichst wenig Berechnungen erforderlich sind.
Datensicherheit und die Sicherheit der korrekten Informationsberechnung und Speichersicherheit sind zwar sehr wichtig und L?sungen wie Semaphore oder ... k?nnen hilfreich sein, aber bedenken Sie bei der Gestaltung einer Software oder Website oder eines Blockchain-Netzwerks und ... auch wenn eine zus?tzliche Bedingung oder Schleife vom Programmierer implementiert wird, wirkt sich dies stark auf die Geschwindigkeit aus.
Geschwindigkeit ist in Blockchain-Netzwerken sehr, sehr wichtig, und ein Problem, das von normalen Benutzern nicht berücksichtigt wird, ist die Geschwindigkeit oder Struktur des Infrastrukturcodes des Netzwerks.
Wenn gesagt wird, dass ein Netzwerk 20.000 Transaktionen pro Sekunde durchführen kann oder wie Bitcoin weniger als 5 Transaktionen pro Sekunde sind, deutet dies auf viele Probleme wie falsches Design oder nicht optimale Programmierinfrastruktur usw. hin, die sein müssen korrigiert.
Natürlich gibt es grunds?tzliche und fachliche Kritik am Hedera-Netzwerk, auf die ich im Moment nicht eingehen werde.
Fortsetzung im n?chsten Artikel