[ace-users] Reactor/SysV MQ design question
andrewjroark at yahoo.com
Sun Sep 2 12:27:40 CDT 2007
ACE version: 5.3.1
Platform: Linux 64-bit (deployed to 4 CPU machines)
I've completed a nifty application using ACE and although it works ok, some performance issues lead me to think I've made some design errors.
The application is an event driven publisher/broadcaster. It is designed something like this (excuse the ASCII art):
SysV MQ message from external App
--> [ MyApp ]
--> Client 1
--> Client 2
--> Client n
Most of the time there will be 1, 2 or 3 listeners.
Within "MyApp" I'm using a reactor in one thread and a MQ receiver in
another thread. The MQ thread notifies the socket (reactor) thread via threadsafe queues of
lightweight (enum) command messages.
MQReceiverThread --> (received MQ msg)
--> ReactorThread --> (builds network msg)
--> publishes to listeners in a round-robin fashion
The problem: in practice I'm seeing some significant performance
glitches. Like, sometimes one thread will dominate over another; other
times the publishing takes significantly longer than it should. Given enough volume and time, the swap daemons go to 99% across all CPUs, impacting the performance of all applications on the machine. [ACE 5.3, Linux 64-bit]
I have a number of questions, but, to start somewhere, can I put the MQ
receiving logic into the reactor somehow, instead of in a separate
Thanks for your guidance :)
Moody friends. Drama queens. Your life? Nope! - their life, your story. Play Sims Stories at Yahoo! Games.
More information about the Ace-users