[英]Multithreading with TCP / IP socket
我正在使用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();
將設備與所有其他操作分離掃描。 將其拆分為兩個線程。 一個線程(前端)只處理掃描設備並將接收到的數據保存到隊列中。 該線程應以最高優先級運行。 第二個線程(后端)從隊列中獲取數據,並隨意做任何你想做的事情。 您可能需要多個后端線程,並且在您開始工作之后,您需要調整后端線程的數量,以確保您可以比從設備接收請求更快地處理請求,否則您的隊列將變得太大。
但請注意,Java通常不是實時語言,即使使用專用線程,前端線程也可能需要更多時間來安排您可能喜歡的語言。 您可以對“realtime java”進行Web搜索,以查看是否有任何現有的實時JVM可以幫助您。
無論如何,甚至不要考慮在低於4核的CPU上運行它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.