gpt4 book ai didi

multithreading - C++ fork/std::thread 和 boost::timed_join

转载 作者:行者123 更新时间:2023-12-02 03:34:54 24 4
gpt4 key购买 nike

我有一个程序正在分析大量文件(最多 10000 个)。平台是带有 unix 操作系统的 AMD64。语言是c++。

该程序当前正在为每个文件 fork 主进程(直到达到限制,然后等待子进程完成)。 child 正在启动一个 boost::thread 来执行分析功能,然后在它创建的 boost::thread 上执行 boost::timed_join。

所以,我现在有一些问题。

  1. 用更轻便的选项替换前叉是否合理?我不确定这能带来多少性能/内存增益,我在 stackoverflow 的某处读到,fork 在 unix 上并不那么昂贵。

  2. 我将如何执行杀死正在执行分析的线程?启动 2 个线程,一个执行分析,另一个正在等待,如果第一个在一定时间后没有完成,第二个正在杀死第一个?有没有更优雅的方式来做到这一点?如果这是选择的选项,我如何杀死另一个线程?获取 native 句柄然后 pthread_kill()?

  3. 如果建议保留 fork 机制:我考虑过用 std::threads 替换 boost::threads,我将如何替换 boost::timed_join ?让子进程休眠一段时间然后杀死线程是一种方法,但是如果线程在时间结束之前完成(这将一直发生), child 仍然会 sleep 直到时间结束-> 开销。

如有任何建议,我们将不胜感激!

最佳答案

我遇到了 AFIO ( docs , code ) 今天。它是一个基于 ASIO 和 Boost.Thread 的有抱负的 Boost 候选者。

AFIO is a linear scalable, batch, chainable, asynchronous closure execution engine extending ASIO and Boost.Thread specialised as a portable asynchronous file i/o implementation library.

这可能会简化您的异步文件处理。

请注意,这不会 fork 其他操作系统进程,而是使用线程或 ASIO Proactor 类线程结构。它可能会消耗更少的系统资源,但更容易崩溃(正如@Ashalynd 评论的那样)

关于multithreading - C++ fork/std::thread 和 boost::timed_join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com