Google Cloud 运行 是否允许您在 Java 中生成更多线程?
Does Google Cloud Run allow you to spawn additional threads in Java?
当 Cloud 运行 启动一个实例来处理我的 Java 服务的 HTTP 请求时,该服务必须通过网络调用联系多个外部服务以获得关于数据。
我不想按顺序调用这些外部服务,而是希望将它们并行化,这样我就可以在等待 networkIO 完成时节省执行时间。这是因为我的服务本身不是计算密集型的,但大部分时间都在等待网络响应,每个响应可能需要数百 (ms)。简单的 new Thread
会为我完成工作。
我很好奇 Cloud 运行 limits/prohibits 是否创建了新线程,因为我在文档中找不到该信息。
(例如 Java AppEngine 要求您使用特定于 gcloud ThreadManager API
来管理线程。)
Cloud 运行 不会对您可以使用 docker 容器中的代码执行的操作施加任何限制,只要您不超过虚拟机的 limits服务器实例。您唯一的义务是通过正在管理的 HTTP 连接向客户端发送响应。如果你想启动线程,那很好。您选择的 HTTP 服务器也可能会这样做。请记住,服务器实例 运行 您的容器可以在不处理请求时随时被释放,并且您的线程将立即终止,恕不另行通知。
App Engine 与 Cloud 运行 有很大不同,因为它严格管理您部署的代码的运行时行为。云 运行 根本不会这样做 - 您可以决定使用哪个 JVM,使用哪个 HTTP 服务器,以及它们如何在您部署的容器中运行。
此外,当没有请求正在处理时,处理能力接近于 0 CPU 允许。确保在发送 http 响应时所有线程处理都已终止。
此外,在托管平台上,您允许使用 1 个 vcpu。因此,用于处理的多线程是无用的(但这不是你的情况,你只需要并行等待)。
最后,在高并发的情况下,注意不要产生很多线程!和记忆。
当 Cloud 运行 启动一个实例来处理我的 Java 服务的 HTTP 请求时,该服务必须通过网络调用联系多个外部服务以获得关于数据。
我不想按顺序调用这些外部服务,而是希望将它们并行化,这样我就可以在等待 networkIO 完成时节省执行时间。这是因为我的服务本身不是计算密集型的,但大部分时间都在等待网络响应,每个响应可能需要数百 (ms)。简单的 new Thread
会为我完成工作。
我很好奇 Cloud 运行 limits/prohibits 是否创建了新线程,因为我在文档中找不到该信息。
(例如 Java AppEngine 要求您使用特定于 gcloud ThreadManager API
来管理线程。)
Cloud 运行 不会对您可以使用 docker 容器中的代码执行的操作施加任何限制,只要您不超过虚拟机的 limits服务器实例。您唯一的义务是通过正在管理的 HTTP 连接向客户端发送响应。如果你想启动线程,那很好。您选择的 HTTP 服务器也可能会这样做。请记住,服务器实例 运行 您的容器可以在不处理请求时随时被释放,并且您的线程将立即终止,恕不另行通知。
App Engine 与 Cloud 运行 有很大不同,因为它严格管理您部署的代码的运行时行为。云 运行 根本不会这样做 - 您可以决定使用哪个 JVM,使用哪个 HTTP 服务器,以及它们如何在您部署的容器中运行。
此外,当没有请求正在处理时,处理能力接近于 0 CPU 允许。确保在发送 http 响应时所有线程处理都已终止。 此外,在托管平台上,您允许使用 1 个 vcpu。因此,用于处理的多线程是无用的(但这不是你的情况,你只需要并行等待)。 最后,在高并发的情况下,注意不要产生很多线程!和记忆。