考虑在每个请求都由用户级线程(ULT)(绿色线程/erlang进程/goroutine/...任何轻量级线程)处理的平台上构建一个Web应用程序。假设每个请求都是无状态的,并且在应用程序启动时获取数据库连接等资源并在这些线程之间共享。这些线程中什么情况下需要进行垃圾回收?
通常这样的线程运行时间很短(几毫秒),如果设计良好,不会使用超过几个(KB或MB)的内存。如果线程中分配的资源的垃圾收集是在线程退出时完成的,并且独立于其他线程,那么即使是第 98 个或第 99 个百分位数的请求也不会出现 GC 暂停。所有请求都将在可预测的时间内得到答复。
这样的模型有什么问题以及为什么它没有被广泛使用?
最佳答案
您的假设可能不正确。
if well designed doesn't use more than a few (KB or MB) of memory
想象一个用于计算 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
它分配的内存比文本更大。
关于memory-management - 为什么要在网络应用程序中进行垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27959094/