java - 如何测量使用Sockets和并发时的时间

标签 java multithreading sockets time concurrency

我正在模拟客户端和服务器之间的简单连接。发送客户端请求,服务器以并发方式处理它们:服务器类扩展 Thread,并在创建对象时运行任务。

服务器始终处于打开状态,监听请愿书,当有请愿书时,会使用套接字作为参数创建一个对象,然后按照我所说的方式运行任务。

我正在尝试测量处理一个客户一次发送的所有请愿书所需的时间,但我无法做到这一点。对于线程、池等,我通常会花费初始时间,并在我知道一切都完成时花费时间,瞧(通常在连接或检查池是否终止之后)。

但现在我无法知道所有任务何时完成,因为服务器始终在运行。

有什么想法吗?

我将尝试总结代码,以防有人不理解:

    import java.net.*;
    import java.io.*;

    public class MyServer extends Thread
    {
       Socket socket;

       public MyServer(Socket s) { socket=s; this.start(); }

       public void run() 
       { 
          // proccessing of the data sent by the client (just printing values)
          // data is read properly, don't worry
          socket.close(); 
       }

       public static void main(String[] args)
       {
          int port = 2001; // the same one the client is using
          try
          {
             ServerSocket chuff = new ServerSocket(port, 3000);
             while (true)
             {
                Socket connection = chuff.accept();
                new MyServer(connection);
             }
          } catch (Exception e) {}
       }
    }

最佳答案

从您的问题中不清楚客户端是否会(a)稍后通过单个连接发送更多工作,或(b)一次打开多个连接。

如果两者都做不到,那么处理一个连接就是计时的工作单元(事实上,我认为您需要计时的是线程存活的时间)。

如果客户端可能会执行其中一项操作,那么如果可以的话,请更改协议(protocol),以便客户端在单个数据包中发送工作;然后测量处理这些数据包之一需要多长时间。这为您提供了对实际测量内容的明确定义,缺乏该定义可能会导致您出现问题。

关于java - 如何测量使用Sockets和并发时的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386429/

相关文章:

java - lwjgl glDrawArrays 给出无效操作错误

java - 将两个字符串输入数组后停止重复提示?

java - 在 Jung 中修改图形后禁用重新绘制

c - 如何在C中创建2个线程?

ios - 以编程方式从 iPhone/iPad 连接到采集单元(WIFI 设备)

c - Windows 和 Linux 之间通过套接字进行通信的问题

java - Java EE 应用服务器如何找到类路径?

c++ - Qt 和 QWidget 更新中的 std::thread 安全

java - 在 Parse android API 上调用 findInBackground() 时,我们会在哪个线程上得到回调

iphone - iPhone EDGE/3G网络端口范围?有人知道吗