我实现了一个下载管理器,除了我注意到一件事情之外,它可以正常工作,有时线程在写入文件时会阻塞一段时间(50毫秒到10秒),我正在运行该程序在Android上(基于Linux),我的猜测是,如果某种缓冲区在操作系统级别需要刷新,而我的写入实际上是写入该缓冲区,并且如果该缓冲区已满,写入需要等待。有时写入文件块
我的问题是什么可能导致阻塞的原因?
我实现了一个下载管理器,除了我注意到一件事情之外,它可以正常工作,有时线程在写入文件时会阻塞一段时间(50毫秒到10秒),我正在运行该程序在Android上(基于Linux),我的猜测是,如果某种缓冲区在操作系统级别需要刷新,而我的写入实际上是写入该缓冲区,并且如果该缓冲区已满,写入需要等待。有时写入文件块
我的问题是什么可能导致阻塞的原因?
IO是众所周知的是一个“堵”的活动,因此,你的问题应该是“您应该做些什么,而你的程序正忙等待IO完成”
采用一些众所周知的并发策略和基于事件的编程模式是一个好开始
-我已经完成了以下面的方式编写和读取文件,并且从未遇到任何probs。
如:
File f = new File("Path");
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
-您也可以尝试一下NIO
包在Java中。
java.io.BufferedWriter也可以在Android上工作吗? “ – ignis
”......可能导致阻塞的可能原因是什么?“ - 没有看到你的代码,这是不可能告诉的。 – Squonk
写入闪存是一种有时会遇到延迟的操作。 Android是一个突破性的系统,但许多实现在Flash接口的实现细节中存在“一次一个”的瓶颈,所以在某些情况下可能会看到糟糕的性能。这10秒显然令人惊讶,让人想知道手机上还有什么可以运行。 –