BOOST 线程:线程还是进程?

Posted

技术标签:

【中文标题】BOOST 线程:线程还是进程?【英文标题】:BOOST threads: threads or processes? 【发布时间】:2018-08-03 13:58:47 【问题描述】:

BOOST 线程(大约 1.49 版)是真正的线程还是单独的进程?

当我运行一个对接工具的预编译版本时,它看起来像是使用 top 的多个进程(每个进程具有不同的进程 ID 和 100% 的 CPU 使用率),但是当我自己编译它(使用 BOOST 版本 1.60)时,它们看起来像一个进程(具有单个进程 ID 和 800% 的 CPU 使用率)。

【问题讨论】:

boost::thread 是一个线程,仅此而已。 【参考方案1】:

它不应该影响性能,如果这是你担心的。 很长时间,Linux 以独立进程的形式提供多线程。它们像Copy-on-Write 一样共享内存,但没有复制。由于使用更新的Linux call,当它知道线程应该组合在一起时,Top 可能会以不同的方式组织它,但“真正的”线程仍然单独的进程(运行 top -H 到像内核看到线程一样查看线程)。它们是独立调度的,在内核看来,除了一些重叠的内存页外,没有任何共同之处(初始化内存页后,内核不知道,也不在乎)。

是的,旧版本的 boost 可能使用了单独的“进程”而不是“线程”,但无论如何这都是语义。引擎盖下没有什么不同。

【讨论】:

以上是关于BOOST 线程:线程还是进程?的主要内容,如果未能解决你的问题,请参考以下文章

进程间通信:共享内存与线程对象访问

使用 boost :: thread 开了一个线程,如何判断该线程是不是进行完毕? 且如何释放该进程所用的资源?

提升进程 running() 和 exit_code() 线程安全

linux top查看的是进程还是线程

功能实现:进程还是线程划分?

boost::interprocess_mutex 与进程本地 boost::mutex