考慮在平臺上構建Web應用程序,每個請求由用戶級線程(ULT)(綠色線程/ erlang進程/ goroutine/...任何輕量級線程)處理。假設每個請求都是無狀態的,並且在應用程序啓動時獲得數據庫連接等資源,並在這些線程之間共享。這些線程中垃圾收集的需求是什麼?爲什麼垃圾收集在網絡應用程序?
通常,這樣的線程運行時間很短(幾毫秒),如果設計良好的話不會使用超過幾個(KB或MB)的內存。如果線程中分配的資源的垃圾收集在線程的出口處完成並且獨立於其他線程,則即使第98或第99百分位的請求也不會發生GC暫停。所有請求都會在可預測的時間內回答。
這樣的模型有什麼問題,爲什麼它沒有被廣泛使用?
也許是因爲這些假設在現實世界的應用程序中沒有實現? – Volker
erlang每個erlang進程都有GC(綠色線程),所以如果每個請求都在一個沒有重用的進程上處理,您可以調整GC設置(每個進程),這樣除非進程使用了大量的GC的記憶。首先要看的設置是min_heap_size和full_sweep_after。說任何erlang GC都不是世界的停止,所以只會影響該進程的請求延遲。 –
我知道這可以在erlang中完成,但我想知道爲什麼這樣做不流行,並且有沒有這樣做的負面影響。 –