java - 生产者快,消费者慢。磁盘 I/O
问题描述
我正在尝试将来自各种 Android 传感器的数据存储到 csv 文件中。
因此,要接受来自 Android api 的传感器数据,必须实现以下方法。
BlockingQueue<SensorEvent> dataQueue;
// Producer: runs on a HandlerThread
@Override
public void onSensorEvent(SensorEvent event) {
dataQueue.put(event);
}
现在,我使用 apache commons-csv api 将这些数据保存到一个文件中。
CSVPrinter csvPrinter;
// Consumer: runs on a simple java Thread
@Override
public void run() {
while (true) {
SensorEvent event = dataQueue.take();
csvPrinter.printRecord(event.values); // writes float,float,float
// ... break;
}
}
传感器可以提供不同的数据速率,最快的是每 4 毫秒为一个传感器生成数据。如果我正在监听多个传感器,这将开始在队列中累积大量数据。消费者正在执行写入 (I/O) 操作,因此它比生产者慢。我知道增加消费者数量可以解决问题的解决方案。所以,如果我在这种情况下增加消费者的数量,就会有两个线程在两个文件中写入数据。
Que:那么,我的问题是并行编写两个文件是个好主意吗?真的会并发吗?或者,磁盘操作本质上是顺序的?有人可以对这个问题有所了解。
谢谢。
解决方案
推荐阅读
- python - Python 排序函数如何适用于案例:另一个列表中的列表
- mongodb - 在 MongoDB 的聚合管道中使用阶段之间的投影是否有内存性能优势?
- android - 如何在 android 中使用 Poppins 超粗体可下载字体
- c# - 在功能方面,此代码的分配有什么不同吗?
- ruby-on-rails - Sidekiq“默认”队列在第一个作业完成之前不会运行下一个作业
- javascript - Vegas Slide - Texte 过渡
- android - Xamarin ListView 为空或未填充
- java - 如何知道从数组中选择了哪个字符串?
- java - 从 C 客户端读取套接字到 Java 服务器时出现“空白”是否有原因?
- python-3.x - 根据索引将值从一个数据帧附加到另一个数据帧