在 AWS lambda java 中使用 Thread.sleep 是个好主意吗
Is it good idea to use Thread.sleep in AWS lambda java
我正在使用 AWS Lambda 和 Java 编程语言,由于某些要求,我必须让我的 lambda 函数休眠 2-3 秒,在某些情况下最多 12 秒,把Thread.sleep() 在 lambda 函数中,否则会产生任何技术后果。
基本上你可以做任何你想做的事,在这种情况下你只会付出更多:-)
Lambda 函数的整体思想是拥有一个接受输入并产生输出并具有单一职责的函数,类似于普通的旧函数。
让我们想想为什么你需要使用 Thread#sleep
:
- 您执行操作 #1。
- 等待此操作完成。
- 执行操作#2。
这是 3 种不同的职责。对于任何功能来说都太多了,包括 Lambda :-)
这两个操作可以是单独的 Lambda 函数。随着最近添加的 Destination,您的 Lambda #1 可以触发 Lambda #2。
在这种情况下根本不需要轮询。
在少数情况下 Thread.sleep 是合理的。
- 每隔几秒轮询一次,检查不受您的代码控制的某些状态是否已更改。例如。考虑检查某处的远程进程是否已完成。
- 您想模拟某段代码,使其 "takes" 比实际花费更多的时间。
- 限制每秒执行多个操作的代码段。例如。从远程服务器请求多个资源,但限制你的请求,这样你就不会超载。
我相信还有很多更合理的理由。不要害怕睡眠你的代码。确保你睡觉是有正当理由的。还要确保您确实需要在代码中休眠的线程模型不会导致 deadlocks。
请注意,运行 在 AWS Lambda 中,您应该将睡眠优化到尽可能少的时间,因为您会为那段甜蜜的 CPU 时间付出代价。
如果您的 Lambda 使用大量内存,启动两个不同的 Lambda 比等待 12 秒更好(也更便宜)。
如果您有某种工作流程,或者您需要等待特定条件,您可以评估将 AWS Step Functions or (maybe better) send context to an SQS queue with visibility timeout 设置为十二秒的引入。这样,第二个 lambda 将在开始前至少等待 12 秒。
我正在使用 AWS Lambda 和 Java 编程语言,由于某些要求,我必须让我的 lambda 函数休眠 2-3 秒,在某些情况下最多 12 秒,把Thread.sleep() 在 lambda 函数中,否则会产生任何技术后果。
基本上你可以做任何你想做的事,在这种情况下你只会付出更多:-)
Lambda 函数的整体思想是拥有一个接受输入并产生输出并具有单一职责的函数,类似于普通的旧函数。
让我们想想为什么你需要使用 Thread#sleep
:
- 您执行操作 #1。
- 等待此操作完成。
- 执行操作#2。
这是 3 种不同的职责。对于任何功能来说都太多了,包括 Lambda :-)
这两个操作可以是单独的 Lambda 函数。随着最近添加的 Destination,您的 Lambda #1 可以触发 Lambda #2。
在这种情况下根本不需要轮询。
在少数情况下 Thread.sleep 是合理的。
- 每隔几秒轮询一次,检查不受您的代码控制的某些状态是否已更改。例如。考虑检查某处的远程进程是否已完成。
- 您想模拟某段代码,使其 "takes" 比实际花费更多的时间。
- 限制每秒执行多个操作的代码段。例如。从远程服务器请求多个资源,但限制你的请求,这样你就不会超载。
我相信还有很多更合理的理由。不要害怕睡眠你的代码。确保你睡觉是有正当理由的。还要确保您确实需要在代码中休眠的线程模型不会导致 deadlocks。
请注意,运行 在 AWS Lambda 中,您应该将睡眠优化到尽可能少的时间,因为您会为那段甜蜜的 CPU 时间付出代价。
如果您的 Lambda 使用大量内存,启动两个不同的 Lambda 比等待 12 秒更好(也更便宜)。
如果您有某种工作流程,或者您需要等待特定条件,您可以评估将 AWS Step Functions or (maybe better) send context to an SQS queue with visibility timeout 设置为十二秒的引入。这样,第二个 lambda 将在开始前至少等待 12 秒。