我有一個程序正在分析一些文件(最多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