我有一个程序正在分析一些文件(最多10000个)。 平台是带有unix操作系统的AMD64。语言是C++。C++ fork/std :: thread和boost :: timed_join
该程序目前正在为每个文件分配主进程(直到达到限制,然后等待,直到孩子完成)。 孩子正在启动boost :: thread来执行分析功能,然后在它创建的boost :: thread上执行boost :: timed_join。
所以,我现在有一些问题。
用一个更轻量级的选项替换叉是否合理?我不确定这可能会带来多少性能/内存增益,我在某处读到了stackoverflow上的那个fork在unix上并不昂贵。
我将如何执行杀死正在进行分析的线程? 开始2线程,一个执行分析,另一个正在等待,如果第一个在一段时间后没有完成,第二个是杀死第一个?有没有更优雅的方式来做到这一点? 如果这是选择的选项,我该如何杀死另一个线程?获得本地句柄,然后pthread_kill()?
如果保持fork机制是可建议的: 我想过用std :: threads替换boost :: threads,我将如何替换boost :: timed_join?让孩子进入睡眠状态一段时间,然后杀死线程将是一种做法,但如果线程在时间结束之前完成(这将始终发生),那么孩子仍然会睡觉,直到时间结束 - >开销。
任何意见将不胜感激!
创建新进程比创建新线程更重量级,因此不会这样做会在已用资源方面带来优势。另一方面,如果分叉进程崩溃,那么其他进程不受影响,这可能不是线程的情况。 – Ashalynd