j*******t 发帖数: 123 | 1 一个queue里会有很多很多future, 包括future放进来的时间。要求一个处理这个queue
的thread,(也可以多个)凡事超过一定时间的都认为time out, 要invoke other
function 重新处理。做完的要record 做完了就行了。没做完的,但没超时接着等。
我觉得既然这样就肯定不能用future.get (timeout).
我只能不停的检查queue, 看每个future.isdone, 和future产生的时间,做完的和超
时的处理好说,但是没做完的还得放回来。但是如果只有一两个job的话还没time out
的话,就会不停的dequque, enqueue. 显然会waste a lot of computer power,
问问大牛有什么更好的方法吗? |
c******f 发帖数: 243 | |
j*******l 发帖数: 1066 | 3 ExecutorCompletionService#poll(timeout)
ECS返回的都是最先完成的 取出一个以后 把花的时间扣除 继续poll(newTimeout) |
j*******t 发帖数: 123 | 4 callback 不解决有些FUTURE TIMEOUT,就死了的问题吧? 能给个PSUDEO CODE吗?
【在 c******f 的大作中提到】 : 用类似guava里面callback不就行了?
|
j*******t 发帖数: 123 | 5 我可能没说清楚,QUEUE里的FUTURE不是一块放进来的,比如每秒放进来一些。
如果
WHILE (...) {
i) esc.poll() --> if all remaining stuck, it will never response.
ii) esc.poll(timeout) --> what is the value here. If I set 1000, it is
equal to wait and check every second if all remaining is not finished yet.
}
【在 j*******l 的大作中提到】 : ExecutorCompletionService#poll(timeout) : ECS返回的都是最先完成的 取出一个以后 把花的时间扣除 继续poll(newTimeout)
|
H****S 发帖数: 1359 | 6 为什么不能用future.get(timeout)?用 try 包起来,然后catch TumeoutException。
如果catch到了,再invole你的preemptive function。
queue
out
【在 j*******t 的大作中提到】 : 一个queue里会有很多很多future, 包括future放进来的时间。要求一个处理这个queue : 的thread,(也可以多个)凡事超过一定时间的都认为time out, 要invoke other : function 重新处理。做完的要record 做完了就行了。没做完的,但没超时接着等。 : 我觉得既然这样就肯定不能用future.get (timeout). : 我只能不停的检查queue, 看每个future.isdone, 和future产生的时间,做完的和超 : 时的处理好说,但是没做完的还得放回来。但是如果只有一两个job的话还没time out : 的话,就会不停的dequque, enqueue. 显然会waste a lot of computer power, : 问问大牛有什么更好的方法吗?
|