我有一个性能问题,客户端在我的 C++ 应用程序的 DOM 中创建数百个特定类型的对象“Foo”。每个 Foo 实例都有自己的异步工作队列和自己的线程。显然,这不成比例。
我需要在工作队列之间共享线程,我不想重新发明轮子。我需要支持XP,所以不能使用Vista/Win7线程池。处理每个队列项需要完成的工作包括在多线程 COM 单元中进行 COM 调用。XP 线程池的文档说可以在线程工作者函数回调中使用 MTA 单元调用 CoInitializeEx()。我编写了一个测试应用程序并验证它是否有效。我让应用程序在 WorkItem 回调函数中使用和不使用 CoInitializeEx/CoUninitialize 对运行了 100 万次迭代。CoInit* 调用需要 35 秒,没有调用需要 5 秒。这对我的应用程序来说开销太大了。由于线程池是每个进程的,并且第 3 方代码在我的进程中运行,我假设它不是
鉴于所有这些,有什么方法可以使用 Win32 线程池吗?是我遗漏了什么,还是 XP 线程池对于高性能 COM 应用程序毫无用处?我只需要创建自己的线程共享系统吗?