簡體   English   中英

使用TCP / IP套接字進行多線程處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM