[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[sc-dev] Patches for scsynth to communicate using mach messages
I've been wondering if there's any interest in communicating with the
scsynth process using mach messages rather than UDP/TCP through the
loopback interface. In theory, this could be faster than going through
the TCP stack. I've submitted a patch to the SuperCollider project on
source forge here:
https://sourceforge.net/tracker/index.php?
func=detail&aid=1074372&group_id=54622&atid=474250
My current approach is to use CFMessagePort, for ease of
implementation, but it may prove more efficient to move to the lower
level mach_msg() call documented here:
http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_msg.html
at least in the server.
I've also modified the CocoaSC class to have two private sublasses of
OSCPort one of which communicates over TCP, and the other over
CFMessagePort.
One interesting issue is how get replies. The new class I added in
SC_ComPort.h, SC_MachMessagePort, opens a local CFMessagePort to
receive messages, and a remote CFMessagePort to send replies to. I did
it this way, because I didn't see any easy way to block the port thread
until a reply is ready, and return a reply from the
messagePortCallBack() function. Is there a way to tell what requests
will generate replies, and only block in those cases? The main benefit
to blocking before returning is that replies are automatically directed
to the sender, and there can then be multiple clients. The downside is
that it stops being asynchronous, so perhaps my approach of using two
ports is the best way to go.
What would be the best way to measure the difference in latency of
using mach messages vs. IP?
Does anybody know if there's an API to browse for named mach ports? I
suppose rendezvous could be used for that as well.
- Patrick