2016-07-29 5 views
1

Ich habe einen Appserver, der sehr kompliziert wird, da er Daten von eingehenden Anfragen puffern muss und dann diese Puffer über pubsub ausschleusen muss, nachdem genug empfangen wurde. Die Pufferung ist nicht das Problem, aber effizientes Sperren ist ... haarig, und ich bin besorgt, dass es meinen Dienst verlangsamt. Ich erwäge, die Thread-Sicherheit aufzugeben, um alle Sperren zu entfernen, aber ich mache mir Sorgen, dass die Anzahl meiner App-Instanzen verdoppelt werden muss (oder mehr), um dieselbe Benutzerlast zu verarbeiten.Was ist der Vorteil, wenn Sie Ihre appengine App thread sicher machen?

Mein Verständnis ist, dass eine threadsafe App ist, wo jeder Thread eine abgerechnet App-Instanz ist. Mit anderen Worten, ich berechne für zwei Instanzen, indem mehrere Threads in einem Prozess ausgeführt werden können, mit dem einzigen Vorteil, dass die Threads Speicher gemeinsam nutzen können und daher eine kleinere Gesamtfläche haben.

Um es anders auszudrücken: Behandelt eine Multithread-App-Instanz mehrere gleichzeitige Verbindungen oder ist jede abgerechnete App-Instanz ein separater Thread - nur in der Lage, jeweils eine Anfrage zu bearbeiten? Wenn ich die Thread-Sicherheit entferne, muss ich dann einen größeren Pool von App-Instanzen ausführen?

Antwort

0

Multithreading ist in keiner Weise mit der Abrechnung verbunden - Sie zahlen immer noch für eine Instanz, auch wenn 10 Threads parallel für diese Instanz ausgeführt werden.

+0

Mit anderen Worten, wenn ich Gewindesicherheit ablegen, werde ich mehr Instanzen benötigen ... – Sniggerfardimungus

+0

In der Regel ja. Aber da Sie über Sperren und ähnliches sprechen, habe ich vielleicht das Gefühl, dass Sie Ihren bestehenden Code verbessern könnten. –

+0

Ich befülle eine Reihe von verschiedenen Puffern, abhängig von den Daten in der Warteschlange. Wenn ein Puffer voll ist (oder über ein bestimmtes Alter hinaus), schiebe ich ihn über pubsub aus. Jeder Puffer hat seine eigene Sperre und wird nur während der Änderung gesperrt. Wenn eine Instanz mehrere, gleichzeitige Anfragen bedient, besteht eine gute Chance, dass eine Blockierung stattfindet (es gibt eine Menge Puffer, aber 2-4 davon sind sehr stark frequentiert.) Wenn ich finde, dass ich mit pubsub spülen muss Ich mache das nicht während ich das Schloss halte. Ich veröffentliche einen Verweis auf den Puffer, nachdem ich den Puffer durch eine leere Liste ersetzt habe, während ich die Sperre halte. – Sniggerfardimungus