c ++ fork / std :: thread和boost :: timed_join

时间:2014-06-11 19:08:23

标签: multithreading c++11 fork boost-thread stdthread

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

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

所以,我现在有些问题。

  1. 用更轻量级的选项替换fork是否合理?我不确定这可能会带来多少性能/内存增益,我在stackoverflow上的某个地方读到,在unix上,fork并不贵。

  2. 我如何实现杀死正在进行分析的线程? 开始2个线程,一个执行分析,另一个正在等待,如果第一个没有在一定时间后完成,第二个是杀死第一个?有更优雅的方式吗? 如果这是选择的选项,我如何杀死另一个线程?获取本机句柄然后pthread_kill()?

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

  4. 任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:1)

我今天遇到了AFIOdocscode)。它是一个有抱负的Boost候选者,建立在ASIO和Boost.Thread上。

  

AFIO是一个线性可扩展,批量,可链接的异步闭包执行引擎,可扩展ASIO和Boost.Thread,专门用作可移植的异步文件i / o实现库。

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

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