<?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>Concurrency on Bits, Trades &amp; Systems</title>
    <link>https://blog.turboawesome.win/tags/concurrency/</link>
    <description>Recent content in Concurrency on Bits, Trades &amp; Systems</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 04 Oct 2023 09:35:00 +0000</lastBuildDate>
    <atom:link href="https://blog.turboawesome.win/tags/concurrency/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Go&#39;s Race Detector in CI: Catching Data Races Before They Catch You</title>
      <link>https://blog.turboawesome.win/2023/10/gos-race-detector-in-ci-catching-data-races-before-they-catch-you/</link>
      <pubDate>Wed, 04 Oct 2023 09:35:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2023/10/gos-race-detector-in-ci-catching-data-races-before-they-catch-you/</guid>
      <description>Data races are among the hardest bugs to find and reproduce. Go&amp;#39;s built-in race detector finds them automatically — if you run it. Here&amp;#39;s how to integrate it into CI effectively and what to do when it fires.</description>
    </item>
    <item>
      <title>Go&#39;s Scheduler: GOMAXPROCS, Work Stealing, and Why It Matters</title>
      <link>https://blog.turboawesome.win/2020/08/gos-scheduler-gomaxprocs-work-stealing-and-why-it-matters/</link>
      <pubDate>Wed, 12 Aug 2020 10:27:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2020/08/gos-scheduler-gomaxprocs-work-stealing-and-why-it-matters/</guid>
      <description>Go&amp;#39;s M:N scheduler is one of the reasons goroutines are cheap enough to use liberally. Understanding how it works changes how you reason about concurrency bugs and performance anomalies.</description>
    </item>
    <item>
      <title>Building a High-Throughput Event Pipeline in Go Without Losing Your Mind</title>
      <link>https://blog.turboawesome.win/2020/07/building-a-high-throughput-event-pipeline-in-go-without-losing-your-mind/</link>
      <pubDate>Wed, 01 Jul 2020 14:30:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2020/07/building-a-high-throughput-event-pipeline-in-go-without-losing-your-mind/</guid>
      <description>Channels are Go&amp;#39;s concurrency primitive, but a naive pipeline of goroutines and channels won&amp;#39;t survive high throughput. The patterns that scale: batching, backpressure, worker pools, and knowing when to abandon channels entirely.</description>
    </item>
    <item>
      <title>Context Propagation in Go: Deadlines, Cancellation, and Tracing</title>
      <link>https://blog.turboawesome.win/2020/02/context-propagation-in-go-deadlines-cancellation-and-tracing/</link>
      <pubDate>Wed, 19 Feb 2020 11:14:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2020/02/context-propagation-in-go-deadlines-cancellation-and-tracing/</guid>
      <description>Go&amp;#39;s context package is one of the most important idioms in the language. Used well it enables clean cancellation and distributed tracing. Used poorly it becomes a magic bag of values that creates invisible dependencies.</description>
    </item>
    <item>
      <title>Channels vs Mutexes: When to Use Which in Go</title>
      <link>https://blog.turboawesome.win/2019/08/channels-vs-mutexes-when-to-use-which-in-go/</link>
      <pubDate>Wed, 07 Aug 2019 10:22:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2019/08/channels-vs-mutexes-when-to-use-which-in-go/</guid>
      <description>Go&amp;#39;s concurrency slogan is &amp;#39;share memory by communicating.&amp;#39; It&amp;#39;s good advice but incomplete. Some problems are better solved with a mutex than a channel. A decision framework with concrete examples.</description>
    </item>
    <item>
      <title>Goroutines Are Not Threads: The Mental Model Shift</title>
      <link>https://blog.turboawesome.win/2019/04/goroutines-are-not-threads-the-mental-model-shift/</link>
      <pubDate>Mon, 22 Apr 2019 13:07:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2019/04/goroutines-are-not-threads-the-mental-model-shift/</guid>
      <description>Coming from Java, I initially modelled goroutines as lightweight threads. That model is mostly right but subtly wrong in ways that matter — understanding the Go scheduler changes how you think about goroutine lifecycle and blocking.</description>
    </item>
    <item>
      <title>Go for the Seasoned Java Developer: What Feels Familiar, What Doesn&#39;t</title>
      <link>https://blog.turboawesome.win/2019/02/go-for-the-seasoned-java-developer-what-feels-familiar-what-doesnt/</link>
      <pubDate>Wed, 20 Feb 2019 11:33:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2019/02/go-for-the-seasoned-java-developer-what-feels-familiar-what-doesnt/</guid>
      <description>After seven years of Java, switching to Go as a primary language. The frictions, the surprises, and what I&amp;#39;d tell my past self.</description>
    </item>
    <item>
      <title>Project Loom Preview: Virtual Threads and What They Mean for Server Code</title>
      <link>https://blog.turboawesome.win/2018/05/project-loom-preview-virtual-threads-and-what-they-mean-for-server-code/</link>
      <pubDate>Thu, 24 May 2018 09:38:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2018/05/project-loom-preview-virtual-threads-and-what-they-mean-for-server-code/</guid>
      <description>Project Loom&amp;#39;s virtual threads promise to fix Java&amp;#39;s thread-per-request scalability problem by making millions of lightweight threads practical. Here&amp;#39;s what the early design looked like and why it matters for server-side Java.</description>
    </item>
    <item>
      <title>Persistent Data Structures Are Not Just for Functional Purists</title>
      <link>https://blog.turboawesome.win/2017/08/persistent-data-structures-are-not-just-for-functional-purists/</link>
      <pubDate>Wed, 16 Aug 2017 13:07:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2017/08/persistent-data-structures-are-not-just-for-functional-purists/</guid>
      <description>Clojure&amp;#39;s persistent data structures — immutable, structurally shared — seemed academic until we used them in a concurrent risk system. The concurrency model they enable is genuinely simpler than the lock-based alternative.</description>
    </item>
    <item>
      <title>Threading Models in Java: Which One Does Your System Actually Need?</title>
      <link>https://blog.turboawesome.win/2016/11/threading-models-in-java-which-one-does-your-system-actually-need/</link>
      <pubDate>Wed, 09 Nov 2016 10:22:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2016/11/threading-models-in-java-which-one-does-your-system-actually-need/</guid>
      <description>Thread-per-request, event-loop, work-stealing, single-threaded with message passing — Java supports all of them, but each optimises for different things. Choosing the wrong model means fighting the runtime rather than working with it.</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>Building a Trade Blotter That Doesn&#39;t Lie Under Load</title>
      <link>https://blog.turboawesome.win/2015/03/building-a-trade-blotter-that-doesnt-lie-under-load/</link>
      <pubDate>Wed, 04 Mar 2015 10:12:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2015/03/building-a-trade-blotter-that-doesnt-lie-under-load/</guid>
      <description>A trade blotter shows traders their current positions and recent executions. When the system is under load, naive implementations show stale, inconsistent, or missing data. Here&amp;#39;s the design that kept our blotter honest.</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>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>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>Building a Price Feed Aggregator in Java: First Attempt</title>
      <link>https://blog.turboawesome.win/2012/05/building-a-price-feed-aggregator-in-java-first-attempt/</link>
      <pubDate>Wed, 09 May 2012 14:22:00 +0000</pubDate>
      <guid>https://blog.turboawesome.win/2012/05/building-a-price-feed-aggregator-in-java-first-attempt/</guid>
      <description>My first serious Java performance project: aggregating price feeds from multiple venues into a single best-bid-offer view. What I built, what was wrong with it, and what I learned rewriting it.</description>
    </item>
  </channel>
</rss>
