/ Proceedings

Proceedings  ›  Vol. 1 (2026)

The Death of Unnecessary Thread Hopping: Inside Swift 6.2 Approachable Concurrency

Nikita Vasilev

Abstract

When Swift Concurrency was introduced, marking an async method as nonisolated on an actor often caused an immediate and unexpected context switch to the global cooperative pool on reaching an await. In Swift 6.2, NonisolatedNonsendingByDefault reverses that default, allowing async functions to inherit and preserve their caller's execution context. This paper steps through real execution traces to examine what changes in execution behaviour: how @concurrent replaces implicit hops, and how the change removes unnecessary context switching overhead in production iOS applications. The approach is deliberately concrete, following traces across @MainActor and custom global actors step by step rather than describing the behaviour in the abstract, because the earlier behaviour was difficult to reason about precisely for the same reason. Readers take away a precise runtime mental model of thread context inheritance in Swift 6.2 against earlier versions, and rules for when to rely on default context preservation and when to offload work explicitly with @concurrent.

Published in
Proceedings of the Raptors Conference, Vol. 1 (2026)
Conference
Raptors Conference 2026, 21 October 2026, online
Accepted
2026-09-21
DOI
https://doi.org/10.68495/rc.2026.C055
Presentation
Slides (PDF)
Licence
© 2026Nikita Vasilev. Published under Creative Commons Attribution 4.0 International (CC BY 4.0).
Publisher
Hackathon Raptors, Community Interest Company 15557917, London, United Kingdom
Permanent address
https://proceedings.raptors.dev/vasilev-death-unnecessary-thread-hopping

Open access. Every entry in the Proceedings is free to read, with no charge to authors and no charge to readers. Slides are served from this site, so they stay available at the paper's permanent address.

Cite this paper

Nikita Vasilev (2026). The Death of Unnecessary Thread Hopping: Inside Swift 6.2 Approachable Concurrency. Proceedings of the Raptors Conference, Vol. 1 (2026). Hackathon Raptors, London. https://doi.org/10.68495/rc.2026.C055

@inproceedings{raptors2026-c055,
  title     = {{The Death of Unnecessary Thread Hopping: Inside Swift 6.2 Approachable Concurrency}},
  author    = {Vasilev, Nikita},
  booktitle = {Proceedings of the Raptors Conference},
  volume    = {1},
  year      = {2026},
  publisher = {Hackathon Raptors},
  address   = {London, United Kingdom},
  doi       = {10.68495/rc.2026.C055},
  url       = {https://doi.org/10.68495/rc.2026.C055},
  abstract  = {When Swift Concurrency was introduced, marking an async method as nonisolated on an actor often caused an immediate and unexpected context switch to the global cooperative pool on reaching an await. In Swift 6.2, NonisolatedNonsendingByDefault reverses that default, allowing async functions to inherit and preserve their caller's execution context. This paper steps through real execution traces to examine what changes in execution behaviour: how @concurrent replaces implicit hops, and how the change removes unnecessary context switching overhead in production iOS applications. The approach is deliberately concrete, following traces across @MainActor and custom global actors step by step rather than describing the behaviour in the abstract, because the earlier behaviour was difficult to reason about precisely for the same reason. Readers take away a precise runtime mental model of thread context inheritance in Swift 6.2 against earlier versions, and rules for when to rely on default context preservation and when to offload work explicitly with @concurrent.}
}
TY  - CONF
TI  - The Death of Unnecessary Thread Hopping: Inside Swift 6.2 Approachable Concurrency
AU  - Vasilev, Nikita
T2  - Proceedings of the Raptors Conference
VL  - 1
PY  - 2026
DA  - 2026/09/21
PB  - Hackathon Raptors
CY  - London, United Kingdom
DO  - 10.68495/rc.2026.C055
UR  - https://doi.org/10.68495/rc.2026.C055
AB  - When Swift Concurrency was introduced, marking an async method as nonisolated on an actor often caused an immediate and unexpected context switch to the global cooperative pool on reaching an await. In Swift 6.2, NonisolatedNonsendingByDefault reverses that default, allowing async functions to inherit and preserve their caller's execution context. This paper steps through real execution traces to examine what changes in execution behaviour: how @concurrent replaces implicit hops, and how the change removes unnecessary context switching overhead in production iOS applications. The approach is deliberately concrete, following traces across @MainActor and custom global actors step by step rather than describing the behaviour in the abstract, because the earlier behaviour was difficult to reason about precisely for the same reason. Readers take away a precise runtime mental model of thread context inheritance in Swift 6.2 against earlier versions, and rules for when to rely on default context preservation and when to offload work explicitly with @concurrent.
LA  - en
ER  -