你好Stack Overflow社区
我一直在使用OpenShift 4来部署一个多线程应用程序,它依赖于并行性来获得更好的性能。在OpenShift中,可以使用毫核来分配部分CPU数量。在我的例子中,我有一个场景,我只能为我的微服务分配500 m(500毫核)CPU。
微服务有一个主线程和一个使用@Async
注解异步运行的方法。在分配500 m CPU时,是否有任何方法可以保证这两个线程的真正并行性,而不仅仅是并发性?
如有任何有关这一主题的指导或建议,将不胜感激。谢谢大家!
我检查了Dynatrace以了解我的应用程序正在使用的工作进程的数量。我希望看到多个工作进程并发运行,但在选择“count”时,我只在图中找到了一个工作进程。
1条答案
按热度按时间xriantvc1#
简而言之,没有办法保证您将获得真正的并行性。
在Java方面,没有。Java对此没有任何控制。这取决于操作系统调度程序。
在容器级别,500毫核的话,你平均应该至少得到1/2个核心。然而,在某些时候,将不分配核,并且在其他时候,可以分配两个或更多个核。
此外,如果节点不忙碌,您 * 可能 * 平均获得超过1/2的核心。OpenShift文档是这样说的:
因此,在实践中,500毫核也不能保证真正的并行性。
然而,即使你用两个线程获得了真正的并行性,对于500毫核,你只能期望它的1/4的时间。如果您的目标是获得可靠的快速性能,则需要多个内核。(你得到你所付出的。)
1.注意:你应该得到这个。但是,如果节点的资源被过度使用,那么您可能会得到比您应该得到的更少的CPU。