Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您可以控制java线程的延迟吗?_Java_Multithreading_Latency - Fatal编程技术网

您可以控制java线程的延迟吗?

您可以控制java线程的延迟吗?,java,multithreading,latency,Java,Multithreading,Latency,我正在创建一个小型服务器,它将始终侦听新的连接。大约每秒30次,服务器将“唤醒”并向客户端发送更新请求。客户端将一直处于休眠状态,直到唤醒(由上次连接建立)并接受请求并启动更新。因为交换的窗口将一直很小,我如何管理睡眠线程的延迟以获得更精确的睡眠周期测量?为什么它不能一直保持清醒?这种模式对你有什么帮助吗?为什么它不能一直保持清醒?这种模式对你有什么帮助吗?不,你不能 这里有两个完全不同的活动,它们相互耦合在一起。 一个负责定期唤醒,另一个负责更新客户端。 如果唤醒任务等待更新任务完成,则其准确

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

为什么它不能一直保持清醒?这种模式对你有什么帮助吗?

为什么它不能一直保持清醒?这种模式对你有什么帮助吗?

不,你不能

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

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

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 :)
    );
不,你不能

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

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

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 :)
    );

它可以一直保持清醒,但我是为电池优化而设计的。我现在会看看那个观察者。只要评估一下,通过一秒钟30次的睡眠和醒来,你不是在浪费资源,而是在节省资源。它可以一直保持清醒,但我是为电池优化而设计的。我现在来看看那个观察者。只要评估一下,通过每秒30次的睡眠和醒来,你不是在浪费资源,而是在保存资源。这个客户端,它是否需要在网络接口接收数据的准确时刻读取数据?你的意思是猜测网络延迟。顺便说一句,如果您的客户端有一个服务器发送到的开放套接字,那么即使客户端线程(读取套接字的线程)处于休眠状态,服务器也能够发送数据。这里真正的交易是什么?这个客户端,它需要在网络接口接收数据的准确时刻读取数据吗?你的意思是猜测网络延迟。顺便说一句,如果您的客户端有一个服务器发送到的开放套接字,那么即使客户端线程(读取套接字的线程)处于休眠状态,服务器也能够发送数据。这到底是怎么回事?我明白了。这会有用的,谢谢。我一直在使用执行者,显然从来没有注意到scheduledPool:P.I明白了。这会有用的,谢谢。我一直在使用执行者,显然只是从来没有注意到scheduledPool:P。