2

考虑在每个请求都由用户级线程 (ULT)(绿色线程/erlang 进程/goroutine/...任何轻量级线程)处理的平台上构建 Web 应用程序。假设每个请求都是无状态的,并且在应用程序启动时获取数据库连接等资源并在这些线程之间共享。这些线程中的垃圾收集需要什么?

通常这样的线程运行时间很短(几毫秒),如果设计良好,不会使用超过几个(KB 或 MB)的内存。如果线程中分配的资源的垃圾收集是在线程退出时完成的并且独立于其他线程,那么即使是第 98 个或第 99 个百分位的请求也不会出现 GC 暂停。所有请求都将在可预测的时间内得到答复。

这种模型有什么问题,为什么没有被广泛使用?

4

1 回答 1

4

你的假设可能不正确。

如果设计良好不使用超过几个(KB 或 MB)的内存

想象一个用于计算 Web 应用程序中使用的文本文件中单词的函数。一些天真的实现可能是,

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

它分配比文本更大的内存。

于 2015-01-15T08:56:15.917 回答