当我进行滚动自己的线程池的研究时,我遇到了一些实现结果存储的解决方案,您可以从std::future<T>
对象获取函数结果。
据我所知,线程任务应该(尽可能)独立,无阻塞,并且尽可能避免数据共享。
阻塞池会导致性能显着下降,并且不是很理想。
这样的解决方案是不是可以用线程池实现的模型?当然,有些任务需要知道它们何时完成,但是为了解决您正在解决的每个任务而存储未来似乎是一个坏主意,因为它会降低调度性能和执行延迟。
此外,无论如何都必须清理未使用的结果,因为
container< future<T> >
会变得越来越大,这将需要主线程的另一个线程或更多的工作,更糟糕的是,它需要将结果存储锁定到清理,这会在一段时间内阻塞池。
我是从一般角度谈论线程池应该尽可能灵活。如果你需要为你开的每个任务得到一个结果,事情看起来有点不同,但我的问题集中在一般方法上。
是否需要有这样的扩展名,或者最好将其留给一个被认为在各种各样的情况下使用的线程池。