有没有处理过这个问题。
公司有个简单的thread pool实现。
内含1个task队列,N个thread,fixed size。运行中不会增加thread。
然后用postEvalTask()来添加task。
问题出在如果添加的task内部也添加task的时候,有时候就会出现hang。
原因在于如果一次添加了N个task,每个task内部又添加subtask,并且等待subtask返回后task才返回。
那N个thread就被沾满了。导致subtask没有机会被执行,所有task永远不能返回。
这个pool用的地方太多,需要不改变接口来支持recursively task adding。
你们处理过吗?
有没有什么经验分享一下。
我目前想到就是把那个queue变成priority_queue。
每次添加task的时候内部自动检查是否recursive。
如果当前没有idle thread,那就本地执行task,不push到task queue。
如果有idle thread,就level + 1 push到priority queue。
threads永远pick队列里level最高的task执行。
比较naive但是貌似可以解决问题。
--
FROM 158.140.1.*