C++ 控制台程序的线程分析
2022/3/3 22:16:08
本文主要是介绍C++ 控制台程序的线程分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在无任何功能代码的情况下运行控制台,会发现有三个线程在运行
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,查看特定进程的线程信息
这篇关于C++ 控制台程序的线程分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升