<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Hft-Foundations on Bits, Trades &amp; Systems</title>
    <link>https://blog.turboawesome.win/series/hft-foundations/</link>
    <description>Recent content in Hft-Foundations on Bits, Trades &amp; Systems</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 12 Nov 2015 16:03:00 +0000</lastBuildDate>
    <atom:link href="https://blog.turboawesome.win/series/hft-foundations/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Five Years in High-Frequency Trading: What I Actually Learned</title>
      <link>https://blog.turboawesome.win/2015/11/five-years-in-high-frequency-trading-what-i-actually-learned/</link>
      <pubDate>Thu, 12 Nov 2015 16:03:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/11/five-years-in-high-frequency-trading-what-i-actually-learned/</guid>
      <description>Looking back at five years of low-latency systems work: what the environment teaches you that you can&amp;#39;t learn elsewhere, and what habits it instils that don&amp;#39;t always transfer cleanly to other domains.</description>
    </item>
    <item>
      <title>Scala Akka Actors for Trading Workflows: Promises and Pitfalls</title>
      <link>https://blog.turboawesome.win/2015/08/scala-akka-actors-for-trading-workflows-promises-and-pitfalls/</link>
      <pubDate>Wed, 19 Aug 2015 11:28:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/08/scala-akka-actors-for-trading-workflows-promises-and-pitfalls/</guid>
      <description>We evaluated Akka actors for a workflow orchestration layer in the trading system. The actor model&amp;#39;s isolation and message-passing properties were genuinely useful — and its failure modes were genuinely painful.</description>
    </item>
    <item>
      <title>Memory-Mapped Files in Java: Chronicle and the Art of Zero-Copy I/O</title>
      <link>https://blog.turboawesome.win/2015/04/memory-mapped-files-in-java-chronicle-and-the-art-of-zero-copy-i/o/</link>
      <pubDate>Wed, 15 Apr 2015 09:53:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/04/memory-mapped-files-in-java-chronicle-and-the-art-of-zero-copy-i/o/</guid>
      <description>Memory-mapped files let you treat disk storage as if it&amp;#39;s RAM — the OS handles the mapping and caching transparently. Chronicle Queue uses this to give you a persistent ordered log with throughput approaching raw memory bandwidth.</description>
    </item>
    <item>
      <title>Chronicle Queue vs Kafka: Choosing a Persistent Journal at Nanosecond Scale</title>
      <link>https://blog.turboawesome.win/2015/01/chronicle-queue-vs-kafka-choosing-a-persistent-journal-at-nanosecond-scale/</link>
      <pubDate>Wed, 21 Jan 2015 10:44:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/01/chronicle-queue-vs-kafka-choosing-a-persistent-journal-at-nanosecond-scale/</guid>
      <description>Both Chronicle Queue and Kafka provide persistent, ordered message logs. Their performance profiles, operational models, and use cases are almost completely different.</description>
    </item>
    <item>
      <title>Benchmarking Without Lying: JMH, Coordinated Omission, and Honest Numbers</title>
      <link>https://blog.turboawesome.win/2014/10/benchmarking-without-lying-jmh-coordinated-omission-and-honest-numbers/</link>
      <pubDate>Wed, 29 Oct 2014 10:14:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/10/benchmarking-without-lying-jmh-coordinated-omission-and-honest-numbers/</guid>
      <description>Most latency benchmarks are wrong in the same ways. JMH solves the JVM measurement problems; coordinated omission is the harder issue that lives above it.</description>
    </item>
    <item>
      <title>Aeron: Reliable UDP Multicast for Market Data Distribution</title>
      <link>https://blog.turboawesome.win/2014/09/aeron-reliable-udp-multicast-for-market-data-distribution/</link>
      <pubDate>Wed, 17 Sep 2014 13:28:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/09/aeron-reliable-udp-multicast-for-market-data-distribution/</guid>
      <description>Aeron is a message transport library built around reliable UDP and memory-mapped files, designed for the sub-microsecond latency and high throughput that market data distribution demands. Here&amp;#39;s what it looks like in practice.</description>
    </item>
    <item>
      <title>Busy Spinning vs Blocking: Thread Strategies for Ultra-Low Latency</title>
      <link>https://blog.turboawesome.win/2014/05/busy-spinning-vs-blocking-thread-strategies-for-ultra-low-latency/</link>
      <pubDate>Wed, 14 May 2014 10:31:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/05/busy-spinning-vs-blocking-thread-strategies-for-ultra-low-latency/</guid>
      <description>Blocking a thread hands control to the OS scheduler and costs you microseconds on wake-up. Busy spinning wastes a CPU core. The right choice depends on your latency target and hardware budget.</description>
    </item>
    <item>
      <title>Scala on the Hot Path: Where the Abstraction Cost Goes</title>
      <link>https://blog.turboawesome.win/2014/01/scala-on-the-hot-path-where-the-abstraction-cost-goes/</link>
      <pubDate>Wed, 08 Jan 2014 09:44:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2014/01/scala-on-the-hot-path-where-the-abstraction-cost-goes/</guid>
      <description>Scala&amp;#39;s abstractions are elegant — but on the JVM, elegance has a bytecode cost. Understanding where Scala generates boxing, closures, and virtual dispatch tells you which patterns are safe in hot paths and which aren&amp;#39;t.</description>
    </item>
    <item>
      <title>Java Chronicle: Off-Heap Persistence Without Serialisation Overhead</title>
      <link>https://blog.turboawesome.win/2013/09/java-chronicle-off-heap-persistence-without-serialisation-overhead/</link>
      <pubDate>Thu, 05 Sep 2013 14:22:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2013/09/java-chronicle-off-heap-persistence-without-serialisation-overhead/</guid>
      <description>Chronicle Map and Chronicle Queue use memory-mapped files to give you persistent storage that doesn&amp;#39;t touch the GC heap. Here&amp;#39;s how we used it for trade journaling at microsecond latency.</description>
    </item>
    <item>
      <title>Comparing ArrayBlockingQueue to the Disruptor: Numbers Don&#39;t Lie</title>
      <link>https://blog.turboawesome.win/2013/05/comparing-arrayblockingqueue-to-the-disruptor-numbers-dont-lie/</link>
      <pubDate>Wed, 22 May 2013 13:39:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2013/05/comparing-arrayblockingqueue-to-the-disruptor-numbers-dont-lie/</guid>
      <description>A direct benchmark comparison between Java&amp;#39;s ArrayBlockingQueue and the LMAX Disruptor at various producer/consumer configurations. What the numbers show and why.</description>
    </item>
    <item>
      <title>Disruptor Deep Dive: Memory Layout, Cache Lines, and False Sharing</title>
      <link>https://blog.turboawesome.win/2013/04/disruptor-deep-dive-memory-layout-cache-lines-and-false-sharing/</link>
      <pubDate>Tue, 09 Apr 2013 11:27:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2013/04/disruptor-deep-dive-memory-layout-cache-lines-and-false-sharing/</guid>
      <description>Why the Disruptor is fast is inseparable from how it&amp;#39;s laid out in memory. A ground-up look at the cache line strategy that makes the numbers possible.</description>
    </item>
    <item>
      <title>The LMAX Disruptor: How a Ring Buffer Changed My Mental Model of Queues</title>
      <link>https://blog.turboawesome.win/2013/02/the-lmax-disruptor-how-a-ring-buffer-changed-my-mental-model-of-queues/</link>
      <pubDate>Thu, 28 Feb 2013 09:55:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2013/02/the-lmax-disruptor-how-a-ring-buffer-changed-my-mental-model-of-queues/</guid>
      <description>The Disruptor pattern replaced our internal queue infrastructure and cut p99 latency in half. Here&amp;#39;s the mental model shift required to understand why it works.</description>
    </item>
    <item>
      <title>Introduction to Lock-Free Programming in Java</title>
      <link>https://blog.turboawesome.win/2013/01/introduction-to-lock-free-programming-in-java/</link>
      <pubDate>Thu, 17 Jan 2013 10:55:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2013/01/introduction-to-lock-free-programming-in-java/</guid>
      <description>Lock-free programming replaces mutex-based synchronisation with atomic CPU instructions. The performance gains are real; the correctness requirements are unforgiving.</description>
    </item>
    <item>
      <title>Mechanical Sympathy: Writing Java That Respects the Hardware</title>
      <link>https://blog.turboawesome.win/2012/12/mechanical-sympathy-writing-java-that-respects-the-hardware/</link>
      <pubDate>Tue, 04 Dec 2012 10:42:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2012/12/mechanical-sympathy-writing-java-that-respects-the-hardware/</guid>
      <description>Martin Thompson&amp;#39;s term &amp;#39;mechanical sympathy&amp;#39; reframed how I think about software performance. Here&amp;#39;s what it means in practice when writing Java for latency-sensitive systems.</description>
    </item>
    <item>
      <title>Latency vs Throughput: The False Dichotomy I Learned the Hard Way</title>
      <link>https://blog.turboawesome.win/2012/09/latency-vs-throughput-the-false-dichotomy-i-learned-the-hard-way/</link>
      <pubDate>Tue, 25 Sep 2012 10:33:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2012/09/latency-vs-throughput-the-false-dichotomy-i-learned-the-hard-way/</guid>
      <description>Optimising for throughput and optimising for latency are often portrayed as opposites. In practice they pull in different directions but are not mutually exclusive — and confusing them leads to systems that are bad at both.</description>
    </item>
  </channel>
</rss>
