65.9K
CodeProject 正在变化。 阅读更多。
Home

确定多线程网络应用程序的线程限制

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.17/5 (3投票s)

2002年10月31日

4分钟阅读

viewsIcon

80875

本文将介绍一种方法,用于对基于 W9X/W2K/XP 的计算机进行基准测试,以确定线程使用的最大安全级别,同时保持系统能够处理其他输入而不会进入冻结状态。

免责声明

本文将介绍一种方法,用于对基于 W9X/W2K/XP 的计算机进行基准测试,以确定线程使用的最大安全级别,同时保持系统能够处理其他输入而不会进入冻结状态。请注意,本文档中包含的概念和方法仅是作者对有关该主题的可用材料的解释,不应被视为执行此类测试的唯一方法。此外,对于因读者实施本文中描述的任何方法而导致的系统损坏、数据丢失或任何其他不利影响,作者概不承担任何责任。

引言

作为一名程序员,了解软件应用的系统/资源需求通常很重要。这对于编写多线程网络应用程序尤其重要。通常,您需要知道您的目标系统能够支持多少客户端线程。这之所以重要,是因为大多数(如果不是全部)时候,我们的应用程序都应该表现良好,不占用过多的系统资源。我们都知道,没有什么比无响应的应用程序更糟糕了,它会占用大量系统资源来处理信息,导致在我们完成程序之前无法执行任何操作。问题在于,我们往往无法确定目标系统能够支持多少。幸运的是,我开发了一种方法,可以合理地估算可以在目标计算机上安全运行的线程数量,而不会使系统不堪重负。通过一点点数学计算,我们就可以确定这个值。

概念和方法学

首先,我们需要获取以下值:

  1. CPU 速度(单位:MHZ)
  2. 操作系统加载时的 CPU 使用率
  3. 总可用内存
  4. 操作系统加载时的总内存
  5. 单个线程的典型 CPU 使用率
  6. 单个线程的典型内存使用率

有了这些值,我们就有了一个基础来计算。我们将首先从 CPU 默认速度中减去操作系统加载时的 CPU 使用率。然后,我们从中减去 25%。此操作的原因是提供一些关于可用 CPU 时间片的总量的指示,并提供一些余地,允许其他应用程序与服务器协同运行,而不会对目标机器造成极大的影响。该操作可以表示为:

(CPU_TotalAvailable - CPU_UsageWithOS) - 25% = CPU_TotalAvailableForThreads

CPU_TotalAvailableForThreads 是可用于执行应用程序线程的最大量。它假定程序将只占用剩余 CPU 的 25% 来运行我们的进程。这是一个合理的假设,因为应用程序占用所有可用资源通常被认为是不礼貌的。没有人喜欢“霸占者”:-)

为了确定可用的内存量,我们执行与确定可用 CPU 相同的过程。理想情况下,我们希望完全在内存中运行以避免页面交换,这也会导致系统速度变慢。该操作可以表示为:

(Mem_TotalAvailable - Mem_UsageWithOS) - 25% = Mem_TotalAvailableForThreads

Mem_TotalAvailableForThreads 是可用于执行应用程序线程的最大量。这也假定程序将只占用剩余内存的 25% 来运行我们的进程。

现在是激动人心的部分。创建您的线程并对其进行性能分析,以确定单个实例使用的 CPU 和内存量。这将为您提供一个基线值。在本例中,假设一个线程使用 512 KB 的内存和 0.5% 的 CPU。现在,使用这些值对照我们之前获得的值,您可以将内存和 CPU 使用率值除以 Mem_TotalAvailableForThreadsCPU_TotalAvailableForThreads,以确定两个新值 CPU_ThreadsMaxAllowable,如下所示:

CPUTotalAvailable / .5% = CPU_ThreadsMaxAllowable

MemTotalAvailableForThreads / 512KB = Mem_ThreadsMaxAllowable

单独来看,这两个值都没有多大用处,因为它们都相当模糊,所以我们将它们相加然后除以二,得到 MaxAllowableThreads,这是 CPU 和内存之间的平衡。

最后

总而言之,我认为这是确定多线程网络应用程序线程使用自我级别的一种合理方法。这可以从应用程序内部完成,以确定其运行时线程使用情况,或者在非常相似地模拟目标安装平台的测试系统上进行。祝您好运,希望您觉得本文有用。

© . All rights reserved.