Hi,

> 
> A brief look on the web throws a couple of links which suggest that RMI
> should be *slower* that a Socket implementation.
> 
> See; http://java.sun.com/developer/technicalArticles/ALT/sockets/
> 
> I would suggest that the problem lies with your "(naive) socket
> implementation".  As to what the problem could be, I'm afraid that I'm not
> an expert in that area - especially without seeing any code.

Well, maybe my implementation isn't realy naive. It's very much like the 
example in this article. I just send my objects througg an objectoutputstream 
over the socketoutputstream to the receiver. At the receiver side, there is a 
thread looping over a readObject call of an objectInputStream, dumping the 
received objects in a LinkedBlockingQueue.

> 
> My personal approach might include;
> - Decide that my RMI approach was fast enough and leave it alone
Well, the RMI approach is fast, but in theory the TCP approach should be even 
better.

> - Use something like Wireshark and test both approaches to see if it's the
> transmission or the de/serialisation which is taking the time

The only difference I can see at the moment is that the data is sent in short 
bursts whereas the flow is more constant when using RMI.

Would converting the code to use NIO make a big difference?


> 
> Have you considered re-asking this question on something like Stack
> Overflow?

I'll try that.

> 
> Sorry I can't be more help.
> 

Thanks anyway.

Regards,

Silas


> On Fri, Sep 17, 2010 at 12:28 PM, Silas De Munck 
<[email protected]>wrote:
> > Hello,
> > 
> > In the context of a distributed discrete event simulation, I need to be
> > able
> > to send objects at a high rate between program instances on different
> > hosts.
> > Initially I implemented this using remote calls to an object instance
> > living
> > on the other side. This performs fairly well, but because essentially I
> > only
> > need a one-way stream-connection with asynchronous sending, I thought
> > using the RMI mechanism for this was not the best solution. Therefore I
> > added a TCP
> > implementation using Sockets and ObjectStreams.
> > 
> > Now comparing the RMI and the socket implementation, the results are
> > somewhat
> > strange. I expected the sockets to perform better because of the reduced
> > overhead, but this isn't the case. My (naive) socket implementation only
> > reaches about 25% of the througput rate of the RMI implementation.
> > 
> > Does RMI use a different (faster) serialization implementation, compared
> > to the
> > serialization used with ObjectInput/Output-stream?
> > Are there any other differences that could explain the performance
> > difference?
> > 
> > Any pointers on where to start investigate this issue would be very much
> > appreciated.
> > 
> > Regards,
> > 
> > Silas
> > 
> > 
> > 
> > 
> > --
> > 
> > Silas De Munck
> > PhD Student
> > 
> > Computational Modeling and Programming (COMP)
> > University of Antwerp
> > Middelheimlaan 1
> > 2020 Antwerpen, Belgium
> > G2.07, Department of Computer Science and Mathematics
> > 
> > e-mail: [email protected]

-- 

Silas De Munck
PhD Student

Computational Modeling and Programming (COMP)
University of Antwerp
Middelheimlaan 1
2020 Antwerpen, Belgium
G2.07, Department of Computer Science and Mathematics

e-mail: [email protected]

Reply via email to