我想解析EPUB文件,在将文件读入内存后,我需要解析内容。这本书可能有10多章;我为每一章创建了NSOperation实例,并在CPU计算中运行并发。
我应该有2个线程,每个线程有5章要处理,或者每个线程有10个线程?哪一个更有效率?不同的设备会有不同的策略吗?
答案 0 :(得分:4)
我应该有2个线程,每个线程有5章要处理,或者每个线程有10个线程?哪一个更有效?
您应该做的是创建一个可能有2个或3个线程的队列,一个队列,并让每个线程一次从队列中拉出一个任务并执行它。工作线程数应与设备上的核心数成比例。 (实际的最佳数量将取决于处理任务是否需要执行可能导致线程阻塞一段时间的I / O ...)
为每个章节创建一个线程会占用资源(线程堆栈)而不会加速。如果你有足够的物理内核,线程实际上可以在不同的内核上并行执行,那么你只能获得加速。
将章节预先分配给线程并不是一个好主意,因为您可能会为一个线程分配比另一个更小的工作负载。
实际上,如果可以廉价地估计处理每章的工作量,那么您可以更好地在线程上调度工作负载而不是简单的队列。但值得努力的是值得商榷。