Зачем собирать мусор в веб-приложениях?

Рассмотрите возможность создания веб-приложения на платформе, где каждый запрос обрабатывается потоком пользовательского уровня (ULT) (зеленый поток / процесс erlang /goroutine/... любой легкий поток). Предполагая, что каждый запрос не имеет состояния и ресурсы, такие как соединение с БД, получаются при запуске приложения и распределяются между этими потоками. Зачем нужна сборка мусора в этих потоках?

Обычно такой поток является коротким (несколько миллисекунд) и, если он хорошо спроектирован, не использует более нескольких (КБ или МБ) памяти. Если сборка мусора для ресурсов, выделенных в потоке, выполняется на выходе потока и не зависит от других потоков, то не будет никаких GC-пауз даже для 98-го или 99-го процентиля запросов. Все запросы будут даны ответы в предсказуемое время.

В чем проблема с такой моделью и почему она не используется широко?

1 ответ

Ваше предположение не может быть правдой.

если хорошо продуманный, не использует больше (КБ или МБ) памяти

Представьте себе функцию для подсчета слов в текстовом файле, который используется в веб-приложении. Некоторые наивные реализации могут быть,

def count_words(text):
    words = text.split()
    count = {}
    for w in words:
        if w in count:
            count[w] += 1
        else:
            count[w] = 1
    return count

Он выделяет больше памяти, чем текст.

Другие вопросы по тегам