我们通过在单独的vm中运行来扩展我们的单线程应用程序 - 每个实例都配置为在整个工作负载的特定分区上运行。一个想法一直在流传,我们可以通过向应用程序的某些部分添加线程来获得更好的性能,但我们不会消除当前的vm依赖性。
是否为专为虚拟环境设计的应用程序架构线程不同于为非虚拟机环境设计的应用程序?我主要担心的是,对于设计到应用程序中的每个线程,每台计算机可能会旋转的实际线程数是计算机上运行的虚拟机实例数量的函数,实际上可能会导致性能下降。
提前致谢。
编辑:上面的vm是指VMWare提供的虚拟机。
答案 0 :(得分:4)
我认为您对“性能下降”的担忧是有道理的。如果您在计算机上运行多个VM并向VM添加多个线程,则您很可能只会增加上下文切换 - 不会从VM中获得更多工作。
当然,这很大程度上取决于您正在运营的工作。如果它们是IO绑定的,那么添加线程可以为您提供更好的并行化。但是,如果它们受CPU /计算限制,那么你很可能不会获胜并且很可能会看到性能下降。
答案 1 :(得分:1)
是否为专为虚拟环境设计的应用程序架构线程不同于为非虚拟机环境设计的应用程序?
不是IME,但后来我不倾向于编写CPU密集型应用程序 - 我经常通过线程来从GUI中获取内容并简化多个用户/客户端的设计。我只是设计应用程序就像我在本机操作系统上一样。
我不知道线程是如何映射的。我现在正在运行XP VM。 XP任务管理器显示518个线程,主机(Vista 64),任务管理器仅显示“VMware Workstation VMX”的11个线程,尽管还有22个其他线程用于NAT服务,VMnet DHCP,托盘进程等。我有2个线程分配给VM的'处理器'为任何多线程错误提供更多出现的机会。