【问题标题】:Strange threads in application in Win7 WOW64Win7 WOW64中应用程序中的奇怪线程
【发布时间】:2010-03-20 21:51:19
【问题描述】:

我们正在观察应用程序中 Windows 7 x64 上的 4-6 个线程,这些线程有 3 个线程,并且在之前的 Windows(32 位或 64 位)上正常运行7.

Process Explorer 显示以下“未知”线程:

ntdll.dll!EtwDeliverDataBlock+offset

随机间隔后出现以下线程:

ntdll.dll!TpCallbackIndependent+offset
ntdll.dll!TpCallbackIndependent+offset

在该应用程序无法创建线程之后(错误代码 8,足够热的空间...)。

在我看来,某些系统 DLL 创建了 ETW 线程或其他东西。有谁知道这些线程的用途以及如何管理它们?

【问题讨论】:

    标签: windows-7 etw


    【解决方案1】:

    TP 线程是 Windows 线程池 API 的一部分,是因为您的应用程序(或您的应用程序使用的 DLL)使用了 Windows 线程池 API 而创建的。您的应用程序(或您的应用程序使用的 DLL 之一)似乎也在使用 ETW API,这些 API 也使用几个线程。你真的没有能力管理这些线程。

    我严重怀疑这些线程是导致内存不足错误的原因。问题更有可能是您的进程中没有足够的连续内存来为新线程的堆栈保留空间。

    【讨论】:

    • 你是对的,我相信。我使用 procmon 来捕获 CreateThread 调用,它表明 ws2_32.dll 初始化了线程池。仍然很有趣为什么 Win7 中的实现如此不同......以及为什么 winsock 库需要 TP。
    • 基本上使用 TP API 成为一种无需创建专用线程即可处理异步操作的便捷方式——理论上,如果多个 DLL 都使用同一个线程池,系统上的整体线程负载会更低。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多