我正在研究Java中的套接字。问题是我们正在从硬件设备获取信号,并且如果在某个间隔(200ms)之后没有扫描设备。所以我需要加快这个操作。如何使用多任务处理来加速以下代码。
这里的行数通常在250的范围内。
sock = new Socket("localhost", def.PORT);
OutputStream outStream = sock.getOutputStream();
DataOutputStream outDataStream = new DataOutputStream(outStream);
/**************** Start Command for CystometryEMG *****************/
outDataStream.writeInt(size);
outDataStream.writeInt(command);
outDataStream.writeBytes(msg);
InputStream input = new BufferedInputStream(sock.getInputStream());
reader = new DataInputStream(input);
sock.setSoTimeout(def.SOCKET_READ_TIME_OUT);
if (sock.isClosed())
return;
size = reader.readInt();
command = reader.readInt();
errorCode = reader.readInt();
NoofCols = reader.readInt();
NoOfRows = reader.readInt();
/************** Now get the input from the device *************/
for (int i = 0; i < NoOfRows; i++)
arrPb[i] = reader.readDouble();
for (int i = 0; i < NoOfRows; i++)
arrPv[i] = reader.readDouble();
for (int i = 0; i < NoOfRows; i++)
arrV[i] = reader.readDouble();
for (int i = 0; i < NoOfRows; i++)
arrVn[i] = reader.readDouble();
sock.close();
答案 0 :(得分:2)
将设备扫描到所有其他操作。将其拆分为两个线程。一个线程(前端)只处理扫描设备并将接收到的数据保存到队列中。该线程应以最高优先级运行。第二个线程(后端)从队列中获取数据,并随意做任何你想做的事情。您可能需要多个后端线程,并且在您开始工作之后,您需要调整后端线程的数量,以确保您可以比从设备接收请求更快地处理请求,否则您的队列将变得太大。
但请注意,Java通常不是实时语言,即使使用专用线程,前端线程也可能需要更多时间来安排您可能喜欢的语言。您可以在网上搜索“realtime java”,看看是否有任何现有的实时JVM可以帮助您。
无论如何,甚至不要考虑在低于4核CPU的任何东西上运行它