[erlang-questions] What does "soft" real-time mean?

Miles Fidelman mfidelman@REDACTED
Sat Oct 21 16:08:06 CEST 2017

"Hard real time" generally refers to things where exact timing matters - 
things like machine control, sensor-to-weapon linkages, autopilots, 
software-defined radio, and such.  As some definitions put it, missing a 
deadline is considered a system failure. Generally, hard real time code 
involves direct hardware access, referenced to real-time clocks, and you 
can't miss any events.

"Soft real time" generally refers to things that are still "real-time" 
but where things are "looser."  For example, VoIP is time sensitive, but 
can tolerate the occasional lost packet. Other kinds of soft real-time 
can tolerate a little jitter in the timing.

Another term you'll sometimes come across is "near real time" - which 
tends to imply that a little delay is tolerable.

More generally, "hard real time" is exactly that.  Everything else 
involves loosened constraints.

When it comes to languages & run-times, anything that relies on 
asynchronous operating system services is not going to support hard 
real-time.  Hard real-time generally requires that software run very 
close to bare iron, with complete control of the hardware (i.e, no 
interrupts, no pre-emption), and access to very accurate timing data.  
Erlang is known for high performance, but is very far from able to 
support hard real-time.

Miles Fidelman

On 10/20/17 8:00 AM, Avinash Dhumane wrote:
> I have programmed high-frequency trading application in Erlang and 
> comparing its reaction performance in the live market with other 
> competing applications (mostly, in C).
> It has been a consistent observation that my Erlang application lags 
> substantially behind the competing applications. In fact, it never 
> matched the reaction time of the so-called "slowest" C application in 
> the market.
> The benchmark reaction time is about 5 microseconds. It is the time 
> elapsed between tick to order. That is, the difference between the 
> timestamps when I receive the tick (market event) from the mailbox of 
> my process and when I submit the TCP send call on my order.
> My process maintains the market depths of the securities and when my 
> desired price (as a function of best buyers and/or sellers on multiple 
> legs of the order) is observed, I compute the order terms and submit.
> The entire computation and communication (with the market) takes place 
> within the single process and there are no collaborating processes 
> (hence, no inter-process messaging; not even ETS). Still, the reaction 
> time is in the order of 20 to 60 microseconds - that is, nowhere 
> closer to the benchmark reaction time (5 microseconds).
> What I wish to hear from the experienced people on this forum here is 
> whether I am missing on something in my Erlang code, or should I just 
> go ahead and program in C.
> Thanks.
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions

In theory, there is no difference between theory and practice.
In practice, there is.  .... Yogi Berra

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20171021/c49fa0a3/attachment.htm>

More information about the erlang-questions mailing list