繁体   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