Blogg

Här finns tekniska artiklar, presentationer och nyheter om arkitektur och systemutveckling. Håll dig uppdaterad, följ oss på LinkedIn

Callista medarbetare Jesper Holmberg

Structured Concurrency för enklare multitrådad programmering Presentation

// Jesper Holmberg

Presentation från Cadec 2025 Göteborg

Presentation från Cadec 2025 Stockholm

Structured Concurrency är ett stöd för utvecklare att skriva multitrådad kod som är korrekt och enkel att resonera kring. Exekveringstrådar är resurser som måste hanteras på ett strukturerat sätt, på samma sätt som filer, nätverkskopplingar eller andra potentiellt dyra resurser. Med structured concurrency får utvecklaren hjälp att hantera den komplexitet som en multitrådad lösning innebär, och inte tappa bort skapade resurser.

Structured Concurrency är ett begrepp som började uppmärksammas för 5-6 år sedan och bland annat influerade designen av Kotlins coroutines. Därefter har det använts i populära bibliotek för Python och andra språk, och är sedan några år inlemmat i Swift. I Java finns nu Structured Concurrency som en naturlig överbyggnad på Project Looms virtuella trådar.

I den här presentationen tittar vi på vad Structured Concurreny egentligen innebär, och illustrerar med exempel från några olika programmeringsspråk.




Frågor och svar

Kan Javas implementation av Structured Concurrency också ha executors/thread pools?

Structured Concurrency använder sig av virtuella trådar, så behovet av en trådpool faller bort. Scope-objektet som används i Structured Concurrency ersätter behovet av executors eller andra synkroniseringsmekanismer.

Tror du att Structured Concurrency kommer att ersätta alla andra konstruktioner för concurrency i de språk där det finns?

Jag tror att Structured Concurrency är en så lättarbetad och kraftfull konstruktion att den har goda möjligheter att ersätta äldre modeller; den minskar komplexiteten och erbjuder ett mer lättarbetat verktyg. Dock tenderar äldre lösningar att leva kvar länge, det vet alla som jobbat med utveckling.

I Javas implementation, kan man se hierarkin utifrån om man inspekterar jvm:en?

Ja, existerande verktyg som t.ex. jcmd Thread.dump_to_file eller MXBean-API:et visar nu den hierarkiska relationen mellan trådar som startats med structured concurrency.

Hur kan Structured Concurrency användas för att lösa deadlock-problem som t.ex. “the dining philosophers problem”?

Scoped values gör det enklare att inte oavsiktligt dela på data mellan trådar. Däremot, om en lösning kräver delning av muterbart data, erbjuder Structured Concurrency i sig ingen direkt lösning på den aspekten av multitrådad programmering.

Om man jämför med t.ex. iterations-konstruktioner i alla språk, varför kan vi inte ha en universell standard för att handskas med multitrådad programmering, som t.ex. Async/Await?

Structured Concurrency har nog goda förutsättningar att bli ett standardverktyg i nästan alla moderna språk, även om namnsättning och implementationsdetaljer kommer att skilja sig från språk till språk. Async/await kan hantera samtidighet men saknar automatisk hantering av resurser och fel (exceptions) som Structured Concurrency erbjuder.

Ladda ner presentation
Tack för att du läser Callistas blogg.
Hjälp oss att nå ut med information genom att dela nyheter och artiklar i ditt nätverk.

Kommentarer