Vb6 每个核心有多少cpu时间?

Vb6 每个核心有多少cpu时间?,vb6,cpu-usage,com+,cpu-cores,Vb6,Cpu Usage,Com+,Cpu Cores,请帮助我理解这一点 我有一个STA VB6应用程序。它与.net web应用程序运行在同一虚拟服务器上。该服务器上有两个核心。为了测量.net应用程序的性能,我记录了大约30%的cpu利用率。VB6应用程序使用大约20%的cpu。它还在对数据库进行单元外调用时锁定内核一段时间 如果VB6应用程序花1分钟进行单元外呼叫,我是否可以假定核心已完全锁定1分钟?换句话说,我是否可以假设每个内核每小时为VB6应用程序提供一小时的“cpu时间”?如果我有两个内核,我能说这个设置每小时提供120分钟的“cpu

请帮助我理解这一点

我有一个STA VB6应用程序。它与.net web应用程序运行在同一虚拟服务器上。该服务器上有两个核心。为了测量.net应用程序的性能,我记录了大约30%的cpu利用率。VB6应用程序使用大约20%的cpu。它还在对数据库进行单元外调用时锁定内核一段时间

如果VB6应用程序花1分钟进行单元外呼叫,我是否可以假定核心已完全锁定1分钟?换句话说,我是否可以假设每个内核每小时为VB6应用程序提供一小时的“cpu时间”?如果我有两个内核,我能说这个设置每小时提供120分钟的“cpu时间”吗


谢谢大家!

从来没有人锁定核心。你把线程和核心混淆了

在远程调用期间,线程可能(但可能不会)阻塞一分钟。但是核心并不局限于只运行一个线程,否则现代Windows(Windows95及更新版本)根本无法工作。Windows需要能够同时为数百个进程提供服务,只需一个内核

在一个典型的会话中,内核每秒会挂起几十次或数百次进程的部分或全部线程,并分配每个内核执行其他操作。最终,您的线程将恢复活动-可能在同一个内核上,也可能在不同的内核上

特别是,进行远程调用的线程通常处于“等待状态”,这意味着在远程调用完成之前,内核根本不会将内核分配给线程

(采取了几个近似值,但这就是要点)

我是否可以假设每个内核每小时为VB6应用程序提供一小时的“cpu时间”?如果我有两个内核,我能说这个设置每小时提供120分钟的“cpu时间”吗

不可以。了解进程消耗多少cpu时间的唯一实用方法是查看其性能计数器。每经过一小时的CPU时间肯定会少于1小时。要使其每运行一小时的CPU时间接近一小时,您必须最终获得接近100%的CPU利用率(对于VB6进程本身)。例如,在一个双核系统中,每个核大约有48%,全部由VB6进程或类似的进程消耗

此外,对于VB6使用的STA线程,添加内核对进程运行所需的时间(已用时间,而不是CPU时间)没有任何影响(除非多线程COM对象在STA之外执行重要工作)

添加CPU核心几乎不会增加进程的CPU时间消耗,因为完成任务所需的CPU时间不会因为附近有额外的硅而改变


但我觉得我们都错过了一些东西。你到底想知道什么?我不知道你真正的问题是什么,但我敢打赌“CPU时间”不是答案。

你的问题被标记为COM+,所以你需要考虑COM+如何管理组件的线程。 铁芯不应“锁定”。COM+中的线程也不应该这样做(取决于如何定义锁定),因为一个线程可以服务多个请求

也就是说,在COM+中进行长时间(60秒!)单元外调用的STA COM+组件会导致性能问题

基本上,COM+STA线程池将最多5个活动绑定到每个STA线程。当您拨打公寓外电话时,COM+允许其他请求作为STA线程上的另一个活动进行服务。这最多可以发生在5个活动中(每个线程)。此外,一旦将控制权授予另一个活动,则在第二个活动完成之前,原始活动无法重新获得控制权。在重载和/或调用“长时间运行”的情况下,第一个活动完成的时间是所有其他活动(线程上)完成的时间之和。这会扼杀你的表现

这方面最好的文章是。我找不到原始的Microsoft文章,因此我正在链接到此第三方存档版本