我是一个完全的响应式编程新手。我正在研究Akka Actors作为开始尝试。
我对基于线程的并发模型的理解是(例如基于Vanilla Servlet的模型):
1. 对于来自客户端的每个请求,都会生成一个新线程。 2. 这意味着所有底层代码的执行都附加到此线程上并按顺序发生。显然,即使代码的某个部分有瓶颈(远程Web服务调用等),线程也会被阻塞、等待和保持空闲。 3. 服务器(容器)具有固定的线程池以容纳最大数量的并发线程,显然,由于瓶颈,它们将很快耗尽线程。
我对响应式并发模型的理解是(例如基于Akka的模型):
1. 所有逻辑不再附加到单个线程上并按顺序执行。 2. 执行流是响应式的(即在消息上,actor会被触发)。
现在我的问题是:
假设远程Web服务调用的瓶颈存在于这两种模型中。 演员模型如何帮助更好地利用CPU / Core?我们不会遇到演员内的执行线程被阻止的相同问题吗? 例如:如果有200个演员同时被此Web服务调用阻塞,这不意味着当前有200个线程被阻塞吗? 我知道仍然会有其他演员对其他上游事件做出反应。这是我们所称的更好地利用CPU吗?
在线程模型中,只有线程池的小规模是问题的原因吗?
Actor子系统是否具有线程池来生成新的actor并对特定事件做出反应?如果是,那么我们不会遇到相同的问题吗?
如果我的问题很愚蠢,请原谅。
我对基于线程的并发模型的理解是(例如基于Vanilla Servlet的模型):
1. 对于来自客户端的每个请求,都会生成一个新线程。 2. 这意味着所有底层代码的执行都附加到此线程上并按顺序发生。显然,即使代码的某个部分有瓶颈(远程Web服务调用等),线程也会被阻塞、等待和保持空闲。 3. 服务器(容器)具有固定的线程池以容纳最大数量的并发线程,显然,由于瓶颈,它们将很快耗尽线程。
我对响应式并发模型的理解是(例如基于Akka的模型):
1. 所有逻辑不再附加到单个线程上并按顺序执行。 2. 执行流是响应式的(即在消息上,actor会被触发)。
现在我的问题是:
假设远程Web服务调用的瓶颈存在于这两种模型中。 演员模型如何帮助更好地利用CPU / Core?我们不会遇到演员内的执行线程被阻止的相同问题吗? 例如:如果有200个演员同时被此Web服务调用阻塞,这不意味着当前有200个线程被阻塞吗? 我知道仍然会有其他演员对其他上游事件做出反应。这是我们所称的更好地利用CPU吗?
在线程模型中,只有线程池的小规模是问题的原因吗?
Actor子系统是否具有线程池来生成新的actor并对特定事件做出反应?如果是,那么我们不会遇到相同的问题吗?
如果我的问题很愚蠢,请原谅。