WEB开发网
开发学院软件开发VC Visual C++优化对大型数据集合的并发访问 阅读

Visual C++优化对大型数据集合的并发访问

 2010-08-22 20:47:32 来源:WEB开发网   
核心提示:摘要 应用程序性能不仅仅与速度有关,在 Web 服务器环境中,Visual C++优化对大型数据集合的并发访问,卓越的性能还意味着确保可以并发地为最大数量的用户服务,这可以通过高效地使用多处理器计算机和线程管理来达到,我使用标识符前缀 k_ 表示常数和枚举,使用 g_ 表示全局变量、静态全局变量以及静态类成员,本文介绍

摘要 应用程序性能不仅仅与速度有关。在 Web 服务器环境中,卓越的性能还意味着确保可以并发地为最大数量的用户服务。这可以通过高效地使用多处理器计算机和线程管理来达到。本文介绍了可以解决许多并发性问题的技术。一种方法是使用线程管理,在线程基础上控制对数据库的访问 — 这可以保护数据的完整性。在本文中,生成并提供了可重用的线程类。然后,对这些类进行了测试,并在实际环境中分析了它们的性能。

服务器应用程序的成功与否迟早将归结为性能。但是,服务器应用程序中的性能不完全等同于纯粹的速度。您还必须考虑并发性 — 即您能够同时为多少个客户端提供服务。实际上,对于服务器而言,并发性通常要比纯速度更为重要,尤其是对带有许多 CPU 的高端硬件而言。具有低并发性的服务器应用程序只是无法利用多个 CPU(无论该应用程序有多么快)。

我不知道是否有简单明了的用于优化并发性的处方,但多年以来,我已经形成了大量能够提供巨大帮助的窍门。其中一个窍门可以很好地同步对大型集合中的对象的访问,而不会牺牲并发性。本文将演示我的技巧。首先,我将说明一个小型多线程示例程序,该程序演示了并发访问大型集合中的对象的需要。然后,我将开发一个能够解决该问题的可重用类,并且将比较得到的性能数值。作为一项附加的好处,该示例程序将包含一组便于使用的、用于创建和同步线程的类(当然是可重用的)。

示例代码可在 Windows 98 Second Edition、带有 Service Pack 6a 的 Windows NT 或带有 Service Pack 1 的 Windows 2000 上运行(它或许可以在其他版本上运行,但以上版本是我测试过的全部版本。)而且,该代码要求有带有 Service Pack 4 的 Visual C++ 6.0。

请注意,我使用了与 Windows 编程界规范稍微不同的编码风格。具体说来,我使用标识符前缀 k_ 表示常数和枚举,使用 g_ 表示全局变量、静态全局变量以及静态类成员,使用 m_ 表示类成员。

构造块

Figure 1 Exception Class

class Exception
{
public:
  enum ErrId
  {
    // Keep these in the same order as the string table:
    k_critSecInitFailure,
    k_threadCreationFailure,
    k_threadResumeFailure,
    k_threadWaitFailure
  };
  Exception(ErrId errId, unsigned long osErrId = NOERROR) :
    m_errId(errId), m_osErrId(osErrId) {}
  ~Exception()
    {}
  UINT getErrId() const
    { return m_errId; }
  unsigned long getOsErrId() const
    { return m_osErrId; }
  string getErrorMsg() const;
private:
  static string getOSMsg(unsigned long osErrId);
  static const char*const k_messages[];
  UINT      m_errId;
  unsigned long  m_osErrId;
};

1 2 3 4 5 6  下一页

Tags:Visual 优化 大型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接