# Scheduling In Go : Part II - Go Scheduler

DevFeed: [Scheduling In Go : Part II - Go Scheduler](<https://devfeed.tech/articles/scheduling-in-go-part-ii-go-scheduler-22138.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part2.html>)

Published: 2025-04-14T00:00:00Z

Content type: article

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [ardan-labs](<https://devfeed.tech/tags/ardan-labs.md>), [blog](<https://devfeed.tech/tags/blog.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [concurrent](<https://devfeed.tech/tags/concurrent.md>), [context](<https://devfeed.tech/tags/context.md>), [go](<https://devfeed.tech/tags/go.md>), [go-programming](<https://devfeed.tech/tags/go-programming.md>), [golang](<https://devfeed.tech/tags/golang.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [os](<https://devfeed.tech/tags/os.md>), [parallel](<https://devfeed.tech/tags/parallel.md>), [programming](<https://devfeed.tech/tags/programming.md>), [scheduler](<https://devfeed.tech/tags/scheduler.md>), [switching](<https://devfeed.tech/tags/switching.md>), [systems](<https://devfeed.tech/tags/systems.md>), [threads](<https://devfeed.tech/tags/threads.md>)

## AI overview

The second article in a three-part series explains the Go scheduler at a semantic level. It covers logical processors, global and local run queues, context switching, work stealing, and synchronous and asynchronous system calls.

## Source excerpt

This blogpost is the second installment in a three-part series exploring the mechanics and semantics of the Go scheduler. Despite being published in 2018, the content remains relevant today, as the Go scheduler's design continues to influence the development of efficient and scalable concurrent systems. In this post, we will go into the inner workings of the Go scheduler, discussing its components, such as the Global Run Queue (GRQ) and Local Run Queue (LRQ), and its behavior, including context switching, work stealing, and the handling of synchronous and asynchronous system calls. By understanding these concepts, developers can make informed decisions about concurrency and optimization in their Go applications.