AWS Lambda - 如果我启动一个线程,当Lambda被冻结/解冻时会发生什么?

Mus*_*ice 8 java multithreading amazon-web-services aws-lambda

我有一个基于Java的AWS Lambda函数启动后台线程.该线程运行计划任务,将度量标准报告给外部服务.

根据Lambda文档,Lambda函数在完成执行后将被"冻结"一段时间,并且可以"解冻"并在短时间内再次触发函数时重新使用.

我的问题是当发生这种情况时后台线程会发生什么.比如说,我在包含我的处理函数的类的构造函数中启动了我的后台线程.根据文档,处理函数范围之外的所有变量都将保持初始化,因此我的线程应该仍然存在,但它仍然会运行吗?我的线程在后台运行的事实会阻止Lambda首先完成执行吗?或者它会超过五分钟限制,因为即使处理程序功能已完成,它还没有完全完成?

Mar*_*k B 4

AWS 官方博客对此进行了解决

\n\n
\n

但是让\xe2\x80\x99s 假设当函数\n 完成\xe2\x80\x99s 时你有一个后台进程正在运行\xe2\x80\x93 如果重用容器会发生什么?在这种情况下,Lambda 实际上会\xe2\x80\x9c 冻结\xe2\x80\x9d 进程,并在下次调用该函数时\n 将其解冻(但前提是\ n 容器被重用,而\n xe2\x80\x99t 保证)。因此,在重用情况下,您的后台进程仍然存在,但在您离开时它们不会执行。

\n
\n

  • 当然,但是该摘录讨论的是后台进程,而不是后台线程。如果我的应用程序启动后台线程,它的工作方式是否相同?正在运行的线程是否计入执行时间(即导致 Lambda 超时)? (2认同)