作者:h619718610 | 来源:互联网 | 2024-11-02 19:44
在没有功能代码的C++控制台应用程序中,观察到有三个线程在运行。根据StackOverflow的解释,Windows操作系统为了加速进程启动,会在程序开始执行时利用多个CPU内核进行快速初始化,这涉及到`ntdll.dll`库的调用。通过深入了解这些线程的行为,可以更好地进行性能优化,提高应用程序的响应速度和效率。
在无任何功能代码的情况下运行控制台,会发现有三个线程在运行
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 下载:https://docs.microsoft.com/en-us/sysinternals/downloads/pslist
使用命令:pslist.exe 查看所有进程的信息,包括线程的数量
pslist.exe -d pid pid 为进程 ID,查看特定进程的线程信息