Robert Brenstein wrote:

On 21.01.2015 at 8:37 Uhr -0800 Richard Gaskin wrote:

A few months ago I was experimenting with multi-processing in
LiveCode as an alternative to multi-threading.  The literature on
each notes the higher overhead of the former compared to the latter,
but also that the overhead is not as significant as one might think.
In many cases multi-processing allows for less complex code than
multi-threading by virtue of being able to rely on OS partitioning
of memory and CPU resources rather than having to manage all of that
internally via threads.

In those early tests I was interested in seeing just how many
requests I could throw at a single non-threaded LC-based daemon
listening on port 80.  This required a VPS, of course, since shared
hosts generally don't allow always-on processes.


Would you care to provide more technical details on those tests?

I wish it were more interesting, but it was the quickest test I could come up with to begin to measure system load on the server, so it's kinda rudimentary.

I used the example chat scripts here for both client and server:
<http://lessons.runrev.com/m/4071/l/12924-how-to-communicate-with-other-applications-using-sockets>

Normally all that happens with those scripts is that any string sent to the server is broadcast to each connected client, where the echo is added to a log field.

Here I modified the client to add a repeat loop that attempts to continually bombard the server with sent messages as fast as it can up to 5ms between them, while also responding to echos from the server to update the log field. Given the size of the log field, I truncate it to show only the last 1000 or so messages.

The three clients used represent a broad spectrum of performance, in an attempt to identify issues known in the gaming world with slow clients:

- Slow:   Atom 230, 1.6 Ghz, Lubuntu 14.04 LTS
- Medium: Core 2 Duo, 2.26 GHz, Mac OS 10.7
- Fast:   Haswell G3220, 3.0 GHz, Ubuntu 14.10

The slow Atom-based machine also runs an Apache server with OwnCloud and some custom LiveCode services for my network so throughput is even worse than one might imagine, though I did try to keep the network somewhat quiet during the test.

Each test ran for two minutes, with each client sending and receiving messages as fast as they can for the duration of the test.

While running, I had terminal logged into the server running top so I could see a profile of the system in near-real-time, watching the LC daemon.

Most of the time the server never used more than 25% of CPU, with RAM usually below 45 MB.

I did sometimes find the server would freak out with a spike in CPU and an apparent hang, but I found that once I took the slow Atom client off the test performance became reliable again. Given the synchronous nature of the test, server impairment from an unusually slow client is not surprising (and workarounds for handling that the subject of many articles on game server design).

After throttling all clients to send at intervals no shorter than about 25 ms, all runs of the test were always completed successfully, with the server able to handle all three clients gracefully with just a slice of CPU time and surprisingly little RAM.

I never spent the time to explore ways to mitigate TCP bottlenecks on the server side, though I hope to have time to get back to those experiments in Spring.

TCP is generally reliable, but that robustness comes at a significant cost to throughput over UDP. Many large-scale game servers send event frames in UDP for this reason, but at a certain scale they need to go much further to employ action prediction and other exotic solutions to keep up with the traffic.

In this test, the results may seem modest: only three clients, and throttled.

But a steady stream of traffic - far in excess anything we'd expect in any normal chat context - continually handled by a LiveCode daemon that never maxes the CPU nor even consumes much RAM seems quite promising.

Employing multiple worker daemons and making better use of asynchronous methods would likely yield satisfying performance for a wide range of real-time connected apps, all using the humble LiveCode engine we have in our hands right now.

--
 Richard Gaskin
 Fourth World Systems
 Software Design and Development for the Desktop, Mobile, and the Web
 ____________________________________________________________________
 ambassa...@fourthworld.com                http://www.FourthWorld.com

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to