Ruby Thread-Contention: Kein Kampf

2025-02-03

Lange Zeit habe ich "Thread-Contention" in Ruby falsch verstanden. Es ist kein chaotischer Kampf; stattdessen warten Ruby-Threads geordnet in der Queue auf das Global VM Lock (GVL). Jeder Thread erhält das GVL, führt Code aus und gibt es dann frei oder wird nach einer bestimmten Zeit (dem Thread-Quantum, standardmäßig 100 ms) unterbrochen. Dies geschieht, wenn ein Thread E/A durchführt oder länger als sein Quantum läuft. Das Verständnis ist entscheidend für die Optimierung von Multithread-Anwendungen, insbesondere um zu verhindern, dass CPU-gebundene Threads E/A-gebundene Threads blockieren, was zu einer erhöhten Tail-Latency führt. Die Senkung der Priorität von CPU-gebundenen Threads oder die Reduzierung des Thread-Quantums kann helfen, aber der minimale Slice beträgt 10 ms.

Entwicklung