C++ 控制台程序的线程分析

Windows 10在启动应用程序时,由于新的DLL加载方法,通常会有三个线程用于加速初始化。这些线程来自ntdll.dll,主要用于加载其他动态库。线程池中的工作者线程在空闲30秒后会自动退出,因此一段时间后可能只剩下一个线程。开发者可以使用VS调试器或pslist.exe工具查看进程中的线程信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在无任何功能代码的情况下运行控制台,会发现有三个线程在运行

SO 的答案指出,在程序一开始运行时,为加快进程启动,windows 会利用多个 CPU 内核更快地初始化。

ntdll.dll 线程实际上是从链接的库启动的操作系统线程,所有代码都在线程 26372 上运行。

通常这些线程池工作者为应用程序加载其他动态库。

参考:why a c++ application has three threads started by default?

大概过半分钟后,ntdll.dll 线程就会自动消失

 因为 Windows 10 实现了一种加载 DLL 的新方法 - 多个工作线程并行执行 ( LdrpWorkCallback)。所有 Windows 10 进程现在都有几个这样的线程。

 创建了一个特殊的加载器线程池 - LdrpThreadPool,具有 LoaderThreads - 1 最大线程数。空闲超时设置为 30 秒(之后线程退出)

所以我们会发现只剩下一个线程了,详细解释见:Why there are three unexpected worker threads when a Win32 console application starts up?


 线程工具使用:VS 编译器中选择调试 -> 窗口 -> 线程,就会默认打开一个窗口,在代码上打个断点后,窗口就会自动出现线程信息

另外一个工具使用:pslist.exe 下载:PsList - Windows Sysinternals | Microsoft Docs

使用命令:pslist.exe 查看所有进程的信息,包括线程的数量

                 pslist.exe -d pid  pid 为进程 ID,查看特定进程的线程信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值