[Spread-users] Java API Performance

Mike Perik michaelperik at yahoo.com
Mon Apr 21 15:27:59 EDT 2008


Has anyone done any basic performance tests with the Java API?
I'm seeing what I would consider lengthy sending times.

My test involves a process sending 5000 messages.  The message is the current time with the granularity to milliseconds.  The sending process sends a message and then receives the message.  When it receives the message is takes time it received it and subtracts the sending time.  I'm seeing a round trip time of 39-41 milliseconds.  I did the same test in C and the round trip time is more like 1 ms. 

Maybe I'm doing something incorrectly, if so I'm not sure what it is and would be interested in any help you can give me.

Below is the code I'm using.

Thank you for your help,
Mike


import spread.*;
import java.net.*;

public class spreadlatency 
{
    SpreadConnection _sc;
    boolean _sender = false;
    MessageFactory _mf;
    static public void main(String args[]) throws Exception
    {
        SpreadConnection sc = new SpreadConnection();
        spreadlatency sl = new spreadlatency(sc, args.length == 0 ? true : false);
        sc.connect(InetAddress.getLocalHost(), 4803, null, false, false);
        sl.run();
    }
    
    public spreadlatency(SpreadConnection sc, boolean sender) throws Exception
    {
        _sc = sc;
        _sender = sender;
    }

    public void run()
    {
        SpreadGroup sg = new SpreadGroup();
        try {
            sg.join(_sc, "LATENCY");
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        if (_sender == true)
        {
            SpreadMessage sm = new SpreadMessage();
            short y = 1000;
            sm.setType(y);
            sm.addGroup("LATENCY");
            int x = 0;
            while (x++ < 5000)
            {
                //                String st = "";
                long t = System.currentTimeMillis();
                //                st += t;
                //                sm.setData(st.getBytes());
                try {
                    sm.setObject(new Long(t));
                    _sc.multicast(sm);
                    receiveMessage();
                }
                catch (Exception ex)
                {
                    ex.printStackTrace();
                }
                
            }
        }
        else
        {
            int x = 0;
            while (x++ < 5000)
            {
                receiveMessage();
            }
        }
    }
    
    void receiveMessage()
    {
        try {
            SpreadMessage sm = _sc.receive();
            short type = sm.getType();
            if (type == 1000)
            {
                //                String s = new String(sm.getData());
                //                Long l = Long.valueOf(s);
                Long l = (Long)sm.getObject();
                if (_sender == true)
                {
                    System.out.println("Sender Latency: " + (System.currentTimeMillis() - l.longValue()));
                }
                else
                {
                    System.out.println("Recver Latency: " + (System.currentTimeMillis() - l.longValue()));
                }
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}





      ____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ




More information about the Spread-users mailing list