我有2节课。一个 (A) 收集一些数据,另一个 (B) 将数据发送到 TCP/IP 客户端。该过程是异步的,刷新率几乎为零到几秒。请注意,此应用程序没有 GUI,因此我将无法使用许多内置的“onChange”侦听器。
在正常情况下,我会简单地编写代码,以便 A 在 B 上调用“发送”方法,传递数据,这里没有问题。
现在,假设 A 收集数据的速率至关重要(实时),并且 A 不能等待 B 完成发送过程(注意 B 使用 TCP,而不是 UDP)。我实现这个的方式是
- A 将数据放在 B 的字段中
- B 有一个连续循环来检查数据是新的还是现在的。如果是新的,它将发送出去。
如果在发送期间数据被更新了几次没关系,只要它不会减慢 A。为每次发送生成一个新线程原则上不会减慢 A,但它可能会导致一团糟.
您可以看到 B 在同步模式下工作(但 A 不是),它是通过带有 Thread.sleep() 调用的 while 循环实现的。我的问题是:
我应该使用计时器任务而不是 while 循环吗?我知道大多数人讨厌 Thread.sleep() 调用,但最终我唯一感兴趣的是保持 CPU 较低。
难道没有比同步方法更优雅的方法吗?在某些情况下,A 的数据刷新大约需要 1 秒,如果我可以有一个对事件采取行动的侦听器,那就太好了。在这种情况下,25 毫秒的睡眠时间将浪费周期。在其他情况下,它非常快,我根本不想睡觉。
*示例:假设 A 正在从您的屏幕提交屏幕截图,而 B 正在将它们发送给客户端。只有最后一个很重要,B会尽可能快*
有什么想法或建议吗?请让事情尽可能简单和低cpu
多谢!