<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8" -->

---
title: Multi-Threaded Routing Daemons « ipSpace.net blog
description: A deep dive into why routing daemons benefit from multi-threaded architectures, covering the three core functions of routing protocols (neighbor management,...
canonical: https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Multi-Threaded Routing Daemons « ipSpace.net blog | daily.dev
og:description: A deep dive into why routing daemons benefit from multi-threaded architectures, covering the three core functions of routing protocols (neighbor management,...
og:url: https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8
og:image: https://api.daily.dev/og/posts/vmYcTtKc8.png
og:image:alt: Multi-Threaded Routing Daemons « ipSpace.net blog
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-Threaded Routing Daemons « ipSpace.net blog

**[ipSpace.net Blog](https://daily.dev/sources/ipspace)** · 8 min read · 0 upvotes · 0 comments

## Summary

A deep dive into why routing daemons benefit from multi-threaded architectures, covering the three core functions of routing protocols (neighbor management, update handling, topology changes) and how splitting them into threads improves responsiveness and performance. The post explains the difference between processes and threads, notes that Cisco IOS uses non-preemptive scheduling, and details how FRR splits BGP into three threads. It also covers scale-out approaches used in production: per-neighbor threads (RustyBGP), per-address-family threads (IOS XR Distributed BGP), and RIB sharding with update threading (Junos 19.4R1). Commentary highlights that despite 20+ years of BGP development, truly scalable multi-core implementations remain rare, and FIB download/installation time is often the real bottleneck.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.ipspace.net/2021/11/multi-threaded-routing-daemons>

## Questions this post answers

### How does FRR split BGP processing across threads?

FRR splits BGP functionality into three threads: an I/O thread, a keepalive processing thread, and a general 'rest of the stuff' thread. This separation ensures that neighbor keepalives can continue to be sent while the main thread processes large volumes of incoming updates, improving responsiveness under load.

_Engineers tuning BGP at scale track implementation details like these on daily.dev._

### What are the main scale-out threading strategies used in production BGP implementations?

Three approaches are used in production: per-neighbor threads (RustyBGP uses this, yielding strong performance with many peers; IOS XR Distributed BGP extends it down to MED comparison within speaker threads), per-address-family threads (also used in IOS XR Distributed BGP), and RIB sharding with update threading (introduced in Junos 19.4R1, which packs outgoing BGP updates in parallel threads).

_Developers choosing between BGP stacks for large-scale deployments find architecture comparisons like this on daily.dev._

### Why is Cisco IOS considered non-preemptive and what are the implications for routing protocol responsiveness?

Cisco IOS is a run-to-completion operating system, meaning a running process cannot be interrupted by another. This can delay time-sensitive tasks like sending OSPF HELLO messages if another process is busy. IOS partially compensates with a per-process watchdog timer that terminates runaway processes after two quantums, but modern Linux-based systems running threads in parallel on multiple cores handle this far more gracefully.

_Network engineers modernizing routing infrastructure follow platform architecture discussions like this on daily.dev._

## Similar posts on daily.dev

- [Running Your Own AS: BGP on FreeBSD with FRR, GRE Tunnels, and Policy Routing](https://daily.dev/posts/running-your-own-as-bgp-on-freebsd-with-frr-gre-tunnels-and-policy-routing-2autkoulu) · Lobsters · 1 upvotes · 0 comments
- [Multivendor SR-MPLS « ipSpace.net blog](https://daily.dev/posts/multivendor-sr-mpls-ipspace-net-blog-qekokwduk) · ipSpace.net Blog · 0 upvotes · 0 comments
- [OpenShift networking evolved: Real routing, no NAT or asymmetry](https://daily.dev/posts/openshift-networking-evolved-real-routing-no-nat-or-asymmetry-kvqmai0i2) · Red Hat Developer · 0 upvotes · 0 comments

---

Tags: [#bgp](https://daily.dev/tags/bgp)

[View this post on daily.dev](https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Multi-Threaded Routing Daemons « ipSpace.net blog","url":"https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8"},"datePublished":"2026-08-11T08:54:03.911Z","dateModified":"2026-08-11T09:03:18.403Z","description":"A deep dive into why routing daemons benefit from multi-threaded architectures, covering the three core functions of routing protocols (neighbor management,...","image":"https://media.daily.dev/image/upload/s--foaA6JGU--/f_auto/v1722860399/public/Placeholder%2004","thumbnailUrl":"https://media.daily.dev/image/upload/s--foaA6JGU--/f_auto/v1722860399/public/Placeholder%2004","isAccessibleForFree":true,"articleSection":"ipSpace.net Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"ipSpace.net Blog","logo":"https://media.daily.dev/image/upload/s--xS7E82MT--/f_auto,q_auto/v1786438303/logos/ipspace?_a=BAMAMicg0","url":"https://daily.dev/sources/ipspace"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"bgp","timeRequired":"PT8M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"ipSpace.net Blog","item":"https://daily.dev/sources/ipspace"},{"@type":"ListItem","position":3,"name":"Multi-Threaded Routing Daemons « ipSpace.net blog"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/multi-threaded-routing-daemons-ipspace-net-blog-vmycttkc8#faq","mainEntity":[{"@type":"Question","name":"How does FRR split BGP processing across threads?","acceptedAnswer":{"@type":"Answer","text":"FRR splits BGP functionality into three threads: an I/O thread, a keepalive processing thread, and a general 'rest of the stuff' thread. This separation ensures that neighbor keepalives can continue to be sent while the main thread processes large volumes of incoming updates, improving responsiveness under load. Engineers tuning BGP at scale track implementation details like these on daily.dev."}},{"@type":"Question","name":"What are the main scale-out threading strategies used in production BGP implementations?","acceptedAnswer":{"@type":"Answer","text":"Three approaches are used in production: per-neighbor threads (RustyBGP uses this, yielding strong performance with many peers; IOS XR Distributed BGP extends it down to MED comparison within speaker threads), per-address-family threads (also used in IOS XR Distributed BGP), and RIB sharding with update threading (introduced in Junos 19.4R1, which packs outgoing BGP updates in parallel threads). Developers choosing between BGP stacks for large-scale deployments find architecture comparisons like this on daily.dev."}},{"@type":"Question","name":"Why is Cisco IOS considered non-preemptive and what are the implications for routing protocol responsiveness?","acceptedAnswer":{"@type":"Answer","text":"Cisco IOS is a run-to-completion operating system, meaning a running process cannot be interrupted by another. This can delay time-sensitive tasks like sending OSPF HELLO messages if another process is busy. IOS partially compensates with a per-process watchdog timer that terminates runaway processes after two quantums, but modern Linux-based systems running threads in parallel on multiple cores handle this far more gracefully. Network engineers modernizing routing infrastructure follow platform architecture discussions like this on daily.dev."}}]}
```

