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



我有一个程序,它正在分析许多文件(多达10000)。平台为AMD64,操作系统为unix。语言为c++。

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

我现在有几个问题。

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

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

  3. 如果保留分叉机制是可取的:我想过用std::线程替换boost::线程,我该如何替换boost::timed_join呢?让子进程休眠一段时间,然后杀死线程将是一种方法,但如果线程在时间结束之前完成(这将一直发生),子进程仍将处于睡眠状态,直到时间超过->开销

任何建议将不胜感激!

我今天遇到了AFIO(文档,代码)。它是一个基于ASIO和Boost. thread的有抱负的Boost候选程序。

AFIO是一个线性可扩展、批量、可链、异步闭包执行引擎,扩展了ASIO和Boost。线程专用于可移植异步文件i/o实现库。

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

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

最新更新