<div dir="ltr"><div>In general Erlang is not the best option to do CPU intensive computations, especially with a single process.</div><div><br></div><div>I use Elixir/Erlang in financial apps to route incoming messages to websocket clients, process concurrent orders, etc. But, in my own benchmarks, it takes 5-10 microseconds only to parse a FIX incoming message (same process, no inter process comunication).</div><div><br></div><div><a href="https://github.com/santif/ex_fix#benchmarks">https://github.com/santif/ex_fix#benchmarks</a></div><div><br></div><div>I think if you need Erlang for concurrency/scalability *and* you need to do some kind of HFT, so the way to go is by using a NIF or linked in driver (C, Rust?)</div><div><br></div><div>If you only need to do HFT, I think there is no reason to stick with Erlang, since there is no competition with the slowest C app.</div><div><br></div><div>HTH</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div><br></div>--<div>Santiago</div></div></div>
<br><div class="gmail_quote">On Fri, Oct 20, 2017 at 10:46 AM, Sergej Jurečko <span dir="ltr"><<a href="mailto:sergej.jurecko@gmail.com" target="_blank">sergej.jurecko@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Erlang is the right tool for the job for a majority of server workloads. However when your requirements are a reaction time in microseconds, it most surely is not the right tool.<br>
<br>
I would use Rust in that scenario if you’re picking languages.<br>
<br>
<br>
Regards,<br>
Sergej<br>
<div class="HOEnZb"><div class="h5"><br>
> On 20 Oct 2017, at 14:00, Avinash Dhumane <<a href="mailto:nistrigunya@gmail.com">nistrigunya@gmail.com</a>> wrote:<br>
><br>
> 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).<br>
><br>
> 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.<br>
><br>
> 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.<br>
><br>
> 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.<br>
><br>
> 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).<br>
><br>
> 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.<br>
><br>
> Thanks.<br>
</div></div><div class="HOEnZb"><div class="h5">> ______________________________<wbr>_________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br>
______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>