我正在创建一个微型服务器,该服务器将始终侦听新连接。 服务器将每秒大约30次“唤醒”并向客户端发送更新请求。 客户端将一直处于睡眠状态,直到该被唤醒(由上一个连接建立)并接受请求并启动更新。 因为交换的窗口将一直很小,所以我该如何管理睡眠线程的延迟以更准确地测量睡眠周期?

#1楼 票数:3 已采纳

不,你不能。

您在这里拥有的是2个绝对不同的活动,它们相互耦合。 一个负责定期唤醒,另一个负责更新客户端。 如果唤醒任务等待更新任务完成,则其准确性将受到影响。

您可以做的是通过在服务器中引入某种程度的异步来解决问题。

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

    final Runnable notificationTask = new Runnable() {
        @Override public void run() {
            updater.sendUpdate();                          // just *notify* the updater to do an update
        }
    };

    executor.scheduleAtFixedRate(
        notificationTask, 0, 33333333, TimeUnit.NANOSECONDS // freakishly accurate :)
    );

#2楼 票数:0

为什么它不能一直保持清醒? 观察者/可观察模式是否对您有任何帮助?

  ask by ahodder translate from so

未解决问题?本站智能推荐:

1回复

Java多线程应用程序System.out.println产生延迟

我正在用Java编写一个多线程应用程序,使用log4j进行日志记录。 在基准测试期间,我发现每次输出日志都会产生1或2毫秒的延迟。 经过调查,我发现问题仅出在控制台输出中,即使我摆脱了log4j并直接使用System.out.print进行打印,也会出现此问题。 在该线程中,我使用了以下测
4回复

Linux上的JavaBlockingQueue延迟很高

我正在使用BlockingQueue:s(尝试使用ArrayBlockingQueue和LinkedBlockingQueue)在我正在处理的应用程序中的不同线程之间传递对象。 性能和延迟在这个应用程序中相对重要,所以我很好奇使用BlockingQueue在两个线程之间传递对象需要多长时间。
2回复

在单独的线程中处理每个TCP连接会改善延迟吗?

我有一个FTP服务器,在QTcpServer和QTcpSocket之上实现。 我利用信号和插槽机制同时支持多个TCP连接,即使我有一个线程。 我的代码尽快返回到事件循环,它不会阻塞(没有等待函数),并且它不会在任何地方使用嵌套的事件循环。 这样我就已经拥有了合作的多任务处理 ,就像Win
1回复

ZeroMQ:如何使用inproc减少多线程通信延迟?

我正在使用inproc和PAIR来实现线程间通信并试图解决由于轮询引起的延迟问题。 如果我错了,请纠正我:轮询是不可避免的,因为普通的recv()调用通常会阻塞并且不能进行特定的超时。 在我目前的情况下,在 N 个线程中, N-1工作线程中的每一个都有一个主 while 循环。 第 N 个线程是一个
2回复

为什么Monitor.PulseAll会在信号线程中产生“踩台阶”延迟模式?

在使用Monitor.PulseAll()进行线程同步的库中,我注意到从PulseAll(...)被调用到线程被唤醒的时间的延迟似乎遵循“踩台阶”分布 - 极其大步。 被唤醒的线程几乎没有工作; 并几乎立即回到监视器上等待。 例如,在具有12个核心的盒子上,24个线程在监视器上等待(2x
2回复

Winsock本地环回延迟

我正在使用tcp套接字在Windows XP上的两个应用程序之间提供进程间通信。 我出于各种原因选择了tcp套接字。 我看到平均往返时间为2.8毫秒。 这比我想象的要慢得多。 分析似乎表明延迟是在一个应用程序调用发送和另一个端阻止recv返回之间。 我有太多的应用程序,一个守护进程和
1回复

如何减少Android中的Thread.sleep()延迟

我正在Android应用程序的(非UI)线程中的循环中生成计时事件,我需要这些事件以精确的时间间隔发生(此处的精确度意味着变化不得超过+/- 5毫秒)。 用户可以察觉到+/- 10毫米的误差(当然也可以是+/- 20毫米)。 在此循环的顶部,我执行了一些其他计算,这些计算花费了可变的时间,但
2回复

Linux多线程系统上的线程调度差异?

我们有几个对延迟敏感的“管道”式程序,当在一个Linux内核上运行时,它们具有可测量的性能降级。 特别是,我们看到2.6.9 CentOS 4.x(RHEL4)内核的性能更好,而CentOS 5.x(RHEL5)的2.6.18内核性能更差。 通过“管道”程序,我的意思是具有多个线程的程序。