更新:这是我实施的哈希定时轮.如果您有提高性能和并发性的想法,请告诉我.(20月- 2009年)
// Sample usage:
public static void main(String[] args) throws Exception {
Timer timer = new HashedWheelTimer();
for (int i = 0; i < 100000; i ++) {
timer.newTimeout(new TimerTask() {
public void run(Timeout timeout) throws Exception {
// Extend another second.
timeout.extend();
}
}, 1000, TimeUnit.MILLISECONDS);
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我通过使用Hierarchical和Hashed Timing Wheels解决了这个问题.(19月- 2009年)
我正在尝试在Java中实现一个特殊用途计时器,它针对超时处理进行了优化.例如,用户可以使用死线注册任务,并且计时器可以在死线结束时通知用户的回调方法.在大多数情况下,注册任务将在很短的时间内完成,因此大多数任务将被取消(例如task.cancel())或重新安排到将来(例如task.rescheduleToLater(1,TimeUnit.SECOND)) .
我想使用此计时器来检测空闲套接字连接(例如,在10秒内没有收到消息时关闭连接)和写入超时(例如,当写操作未在30秒内完成时引发异常.)在大多数情况下,超时不会发生,客户端将发送一条消息,除非有一个奇怪的网络问题,否则将发送响应.
我不能使用java.util.Timer或java.util.concurrent.ScheduledThreadPoolExecutor,因为它们假设大多数任务都应该超时.如果取消任务,则取消的任务将存储在其内部堆中,直到调用ScheduledThreadPoolExecutor.purge(),这是一项非常昂贵的操作.(也许是O(NlogN)?)
在我在CS类中学到的传统堆或优先级队列中,更新元素的优先级是一项昂贵的操作(在许多情况下为O(logN),因为它只能通过删除元素并重新插入元素来实现.新的优先级值.像Fibonacci堆的一些堆有减少Key()和min()操作的O(1)时间,但我至少需要快速的raiseKey()和min()(或者reduceKey()和max()) .
您是否知道针对此特定用例高度优化的任何数据结构?我正在考虑的一个策略是将所有任务存储在哈希表中并每隔一秒左右迭代所有任务,但这并不是那么美妙.
在C++ 11中,*_until仅当使用稳定时钟(即,仅以不变速率向前移动的时钟)时,超时功能才"按预期"运行.因为system_clock不是一个稳定的时钟,这意味着像这样的代码可以表现得非常惊人:
using namespace std::chrono;
std::this_thread::sleep_until(system_clock::now() + seconds(10));
Run Code Online (Sandbox Code Playgroud)
除非在睡眠期间调整系统时钟,例如夏令时,否则这将导致当前线程休眠10秒.如果在休眠期间将时钟设置为一小时,则当前线程将休眠一小时10秒.
据我所知,*_untilC++ 11中的每个超时函数都有一个相应的*_for函数,它需要一个持续时间而不是一个时间点.例如,上面的代码可以重写如下:
using namespace std::chrono;
std::this_thread::sleep_for(seconds(10));
Run Code Online (Sandbox Code Playgroud)
这些*_for函数不应该担心在函数执行时调整的时钟,因为它们只是说等待多长时间,而不是等待时间应该是什么时间.
此问题不仅影响睡眠功能,对于future和try_lock函数的基于超时的等待也是如此.
我可以设想使用*_until具有不稳定时钟的功能的唯一情况是,当您想要考虑时钟调整时,例如,您想要睡到下周三凌晨3:30,即使有变化从现在到现在之间的夏令时间.还有其他情况下*_until功能比*_for功能更有意义吗?如果没有,是否安全地说,一般来说,*_for超时功能应优先于*_until功能?
我有一个同步执行路径,需要在给定的时间范围内完成或超时.假设我有一个带有main()方法的类,其中我调用方法A(),后者又调用B(),然后调用相同或不同类的C().....所有同步而不使用一个外部资源,如数据库,Web服务或文件系统(其中每个都可以使用TxManager或相应的超时api独立超时).所以它更像是CPU或内存密集型计算.如何在Java中编写它的超时代码?
我已经看过TimerTask,但更多的是使流异步和调度任务.还有其他建议吗?
使用新的NSURLSession,现在在用于创建会话的NSURLSessionConfiguration对象上有一个timeoutIntervalForRequest.
但NSURLRequest对象上仍有一个timeoutInterval,可用于在会话中创建NSURLSessionTask.
我的问题是,如果配置的timeoutIntervalForRequest设置为30,但NSURLRequest用于创建任务的timeoutInterval为60,实际使用哪个超时间隔?
我有一个很大的问题:我的python软件运行在服务器的路由器上似乎存在一些硬件问题.仅与数据库的连接大约每三次成功一次.所以psycopg2.connect()最多可能需要5分钟才能收到超时异常.
2014-12-23 15:03:12,461 - ERROR - could not connect to server: Connection timed out
Is the server running on host "172.20.19.1" and accepting
Run Code Online (Sandbox Code Playgroud)
那是我正在使用的代码.
# Connection to the DB
try:
db = psycopg2.connect(host=dhost, database=ddatabase,
user=duser, password=dpassword)
cursor = db.cursor(cursor_factory=psycopg2.extras.DictCursor)
except psycopg2.DatabaseError, err:
print(str(err))
logging.error(str(err))
logging.info('program terminated')
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
我为查询尝试了一些超时添加,但这没有帮助,因为连接根本没有建立.
有没有办法,当无法建立连接时,我可以立即停止程序吗?
我很好奇Oralce JDBC瘦客户端如何实现查询超时.这可以通过调用java.sql.Statement的setQueryTimeout(int seconds)方法来设置.
这是在客户端的驱动程序本身实现的吗?是一个新的线程产生并加入?或者JDBC驱动程序是否只是向Oracle发送参数,然后它会强制执行超时?
达到超时后,客户端和数据库上的哪些资源被释放,哪些存在?即使客户端放弃了查询还是终止,Oracle是否继续运行查询?客户端是否还有游标对象?
谢谢
在python中,有没有办法在等待用户输入时计算时间,以便在30秒后raw_input()自动跳过该函数?
W/ActivityManager( 81): Launch timeout has expired, giving up wake lock!
W/ActivityManager( 81): Activity idle timeout for HistoryRecord
Run Code Online (Sandbox Code Playgroud)
有谁知道导致这种情况的原因是什么?谢谢.
有没有办法超时功能?我有10分钟的时间来完成一份工作.这个工作包括一个for循环,这是一个例子:
<?php
foreach($arr as $key => $value){
some_function($key, $value); //This function does SSH and SFTP stuff
}
?>
Run Code Online (Sandbox Code Playgroud)
$ arr有15个元素,some_function()有时可能需要1分钟以上.事实上,一旦它被绞死了5分钟.
有没有办法可以超时函数调用并继续使用$ arr中的下一个元素?
谢谢!!
timeout ×10
java ×2
python ×2
android ×1
c++ ×1
c++11 ×1
cloudflare ×1
connection ×1
foreach ×1
function ×1
ios ×1
jdbc ×1
nsurlsession ×1
objective-c ×1
oracle ×1
php ×1
postgresql ×1
psycopg2 ×1
python-2.7 ×1
queue ×1
raw-input ×1
scheduling ×1
synchronous ×1