Concurrency 基础知识|线程与反应式并发模型
我是反应式编程的新手。我正在寻找阿克卡演员作为开始的一步 我对基于线程的并发模型的理解是(例如普通的基于Servlet的模型):Concurrency 基础知识|线程与反应式并发模型,concurrency,akka,threadpool,reactive-programming,Concurrency,Akka,Threadpool,Reactive Programming,我是反应式编程的新手。我正在寻找阿克卡演员作为开始的一步 我对基于线程的并发模型的理解是(例如普通的基于Servlet的模型): 对于来自客户端的每个请求,都会产生一个新线程 这意味着所有底层代码的执行都附加到此线程并以串行方式进行。显然,即使代码的一部分有瓶颈(远程Web服务调用等),线程也会被阻塞并等待并保持空闲 服务器(容器)有一个固定的线程池来容纳最大数量的并发线程,显然,由于瓶颈,它们将快速运行线程 我对反应式并发模型的理解是(例如基于Akka的模型): 所有逻辑不再附加到单个线程,而
(*)=几乎所有反应式框架都是基于传统的同步内核构建的,比如linux;反应式内核正在发展,大型多处理器的出现将有助于这些概念的主流化。Actor是否能帮助解决问题,关键在于Actor是如何实现的。如果它们确实是独立的线程,那么Web服务上未被阻止的参与者将继续执行。因此,即使Web服务阻碍了其中的一些工作,仍然会继续进行有用的工作 如果增加线程池的大小,情况也是如此。他们中的一些人将做其他有用的工作 拥有200个线程意味着您现在给底层操作系统增加了更多负担。很多人会做出恐怖的反应。然而,值得研究的是“操作系统的负担”到底是什么。这是一点记忆,仅此而已。对于Web服务上被阻塞的线程,它们被阻塞,没有被调度,因此它们不会增加系统的上下文切换负担(上下文切换是性能杀手;在大量线程之间切换会消耗大量时间)。因此,它们对系统性能的危害相对较小(前提是您不是动态生成参与者) 因此,在这两种方法中,您都需要足够的线程(参与者或线程池线程),以便有合理的数量保持Web服务100%的利用率,并有足够的时间执行其他任务以使本地机器保持忙碌。您可能希望两台机器都饱和,但不会达到本地机器同时处理太多就绪线程的程度 现在,每一个网络、web服务、主机都是不同的,性能也是不断变化的。最后,您将编写代码来动态控制线程池的大小或准备启动的参与者的数量。这可能是很微妙的