我有一个分析多个文件(最多10000个)的程序。 Platform是带有unix操作系统的AMD64。语言是c ++。
程序当前正在为每个文件分配主进程(直到达到限制,然后等待直到子进程完成)。 孩子正在启动boost :: thread来执行分析功能,然后在它创建的boost :: thread上执行boost :: timed_join。
所以,我现在有些问题。
用更轻量级的选项替换fork是否合理?我不确定这可能会带来多少性能/内存增益,我在stackoverflow上的某个地方读到,在unix上,fork并不贵。
我如何实现杀死正在进行分析的线程? 开始2个线程,一个执行分析,另一个正在等待,如果第一个没有在一定时间后完成,第二个是杀死第一个?有更优雅的方式吗? 如果这是选择的选项,我如何杀死另一个线程?获取本机句柄然后pthread_kill()?
如果保持fork机制是可行的: 我已经考虑用std :: threads替换boost :: threads,我将如何替换boost :: timed_join?让孩子进程休眠一段时间,然后杀死线程将是一种方法,但如果线程在时间结束之前完成(这将一直发生),孩子仍然会睡觉,直到时间结束 - >开销。
任何建议都将不胜感激!