Cost of constructing a communication path vs. sending a message
Mike Kristoffersen <[email protected]> Thu, 16 Sep 2010 13:03:18 +0200
| Newsgroups | gmane.comp.mozilla.devel.dom |
|---|---|
| Message-ID | <[email protected]> |
Working on Bug 587414 that makes Geolocation work from the content process, while the geolocators are in the chrome process an interesting discussion have emerged. This is about sending of messages vs. using the protocol constructor and delete function to transmit information across a process boundary. Now what I understand from the dialog going on in bug 587414, is that when we always send the same event after the constructor then that event should be implicit by the constructor and if the last message is always the same then that should be implicit by the destructor (to reduce the number of messages send). So if I from the child process do: SendP<myProtocol>Constructor(...) SendStart(...) <other messages> SendStop(...) Send__delete__(...) Then I should merge the start with the Constructor and the stop with the __delete__ message, so the communication becomes like: SendP<myProtocol>Constructor(...) <other messages> Send__delete__(...) I can understand the argumentation here, no need to send messages that we don't have to. Now in this specific case message Start and Stop might be repeated a number of times at unknown intervals, because it depends on the content of the pages that the user visits. SendP<myProtocol>Constructor(...) . . . SendStart(...) <other messages> SendStop(...) . . . SendStart(...) <other messages> SendStop>(...) . . . SendStart(...) <other messages> SendStop>(...) . . . Send__delete__(...) Now in a review I was asked to merge the "start" with the constructor and the "stop" with the __delete__ as the first message is always start and the last one is stop (a bit simplified here to illustrate the key point) I don't have a problem with implementing that, but it made me think: As I don't know when the last stop is, I would then have to assume that every stop is the last one - giving the following: SendP<myProtocol>Constructor(...) <other messages> Send__delete__(...) . . . SendP<myProtocol>Constructor(...) <other messages> Send__delete__(...) . . . SendP<myProtocol>Constructor(...) <other messages> Send__delete__(...) Looking at the code it seems like constructing a protocol is much more expensive than just sending a message - so in a case like this where we have two objects communicating over time, is it then the best choice to create the connection between them once, and use this connection to communicate over time - or is it really better to (re-)create the connection each time it is needed? - Is there a significant cost to having a connection open all the time?