Abhängig vom verwendeten OS kann man für solche Sachen die entsprechenden atomaren Funktionen verwenden. Bei Windows wäre dasInterlockedCompareExchange
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Sorry dafür. Das ist mir auch bewusst, aber ich war zu dem Zeitpunkt entnervt da mir der Post eher als Behauptung und weniger als konstruktive Kritik vorkam. Zumal ich mit dem bereits geposteten Code einen bisher fehler- und problemfreien Webserver am laufen habe, der ohne Probleme stundenlang 300 Requests gleichzeitig beantworten kann (getestet mit ApacheBench)1. Kleiner Tipp: Dieses übertriebene GROSSSCHREIBEN wirkt nicht gerade freundlich und muss meiner Meinung nach auch nicht sein.
Nun mit diesem Thema habe ich mich extra lange beschäftigt, daher habe ich mich auch dafür entschieden. volatile ist nicht generell threadsicher, dass ist richtig. Aber im Zusammenhang mit einem boolschen-Typen bahaupte ich jetzt einfach mal: Das das in jedem Fall threadsicher sein wird. Bitte überzeugt mich vom Gegenteil.2. Zu volatile:
Threadsicher ist das nicht.
Wenn "handle_read()" und "handle_write()" ein Event feuern oder einen Thread starten, dann gebe ich dir damit recht. Wenn ich jetzt aber in "handle_read()" z.B. die HTTP-Header lese und auswerte, dann vergeht Zeit in der ein anderer Client warten muss. Und wenn jetzt beispielsweise durch "handle_write()" sehr große Datenmengen an einen Client senden würden, müsste ein anderer Client sogar eherblich lange warten.Ja müsstest du, was allerdings keinerlei Aufwand ist, da die meiste Zeit sowieso beim Aufruf von select beim Warten auf "Events" vergehen wird. Also etwa so
Code:select if server in readables: accept() for(client in clients) if client in readables: client.handle_read() if client in writables: client.handle_write()
Guter Einwand, dass werde ich mal einbauen. Aber ist das an dieser Stelle wirklich so viel besser als das volatile bool? Ich hab das Problem dabei glaub ich noch nicht so ganz verstanden.Abhängig vom verwendeten OS kann man für solche Sachen die entsprechenden atomaren Funktionen verwenden. Bei Windows wäre dasInterlockedCompareExchange
Wenn "handle_read()" und "handle_write()" ein Event feuern oder einen Thread starten, dann gebe ich dir damit recht. Wenn ich jetzt aber in "handle_read()" z.B. die HTTP-Header lese und auswerte, dann vergeht Zeit in der ein anderer Client warten muss. Und wenn jetzt beispielsweise durch "handle_write()" sehr große Datenmengen an einen Client gesendet würden, müsste ein anderer Client sogar eherblich lange warten.
So empfange, verwerte und sende ich in einem gesonderten Thread, und kann in einem anderen neue Clienten annehmen und auf den den Stack zu erledigender Aktionen packen. Oder hab ich dich immer noch missverstanden?
Ich hoffe das die Diskussion so angeregt weitergeht...
Mfg Pain-maker
Mit dem Datentyp hat das im allgemeinen nichts zu tun. Ein bool kann zwar mit hoher Wahrscheinlichkeit in einer atomaren Operation gelesen und geschrieben werden (auch wenn das keineswegs garantiert ist), aber ein allgemeines threadsicheres Mutex kannst du allein mit einem volatile bool nicht umsetzen.Nun mit diesem Thema habe ich mich extra lange beschäftigt, daher habe ich mich auch dafür entschieden. volatile ist nicht generell threadsicher, dass ist richtig. Aber im Zusammenhang mit einem boolschen-Typen bahaupte ich jetzt einfach mal: Das das in jedem Fall threadsicher sein wird. Bitte überzeugt mich vom Gegenteil.
Bitte überzeugt mich vom Gegenteil.
Aber ist das an dieser Stelle wirklich so viel besser als das volatile bool? Ich hab das Problem dabei glaub ich noch nicht so ganz verstanden.