Go Concurrency: Difference between revisions
Line 7: | Line 7: | ||
The majority of languages address concurrency by providing a representation of [[Concurrent_(Parallel)_Programming#O/S_Threads|O/S threads]] or [[Concurrent_(Parallel)_Programming#Green_Threads|green threads]] at language level, and providing [[Concurrent_(Parallel)_Programming#Memory_Access_Synchronization_Primitives|memory access synchronization primitives]] to protect data in presence of concurrent access. | The majority of languages address concurrency by providing a representation of [[Concurrent_(Parallel)_Programming#O/S_Threads|O/S threads]] or [[Concurrent_(Parallel)_Programming#Green_Threads|green threads]] at language level, and providing [[Concurrent_(Parallel)_Programming#Memory_Access_Synchronization_Primitives|memory access synchronization primitives]] to protect data in presence of concurrent access. | ||
Go takes a different approach. The fundamental concurrent execution primitive is the [[Go_Language_Goroutines#Overview|goroutine]], exposed by the language with the [[Go_Language#Keywords|language keyword]] <code>[[Go_Language#go_keyword|go]]</code>. Goroutines are managed by the Go runtime, which maps them transparently | Go takes a different approach. The fundamental concurrent execution primitive is the [[Go_Language_Goroutines#Overview|goroutine]], exposed by the language with the [[Go_Language#Keywords|language keyword]] <code>[[Go_Language#go_keyword|go]]</code>. Goroutines are managed by the Go runtime, which maps them transparently onto threads. While Go provides memory access and thread synchronization primitives at the language level via the <code>[[Go_Package_sync|sync]]</code> package, language guidelines do not exactly encourage their use, unless in very specific situations, such as within a small <code>struct</code> scope. Go provides an alternative concurrency programming model in language, based on Communicating Sequential Processes (CSP), a theoretical model introduced by A. Hoare in the "Communicating Sequential Processes" 1978 ACM paper. This concurrency programming model uses [[Go Language Channels#Overview|channels]], which are exposed at language level with the <code>[[Go_Language#chan_keyword|chan]]</code> keyword. | ||
=Goroutines= | =Goroutines= |
Revision as of 01:30, 3 January 2024
Internal
Overview
The majority of languages address concurrency by providing a representation of O/S threads or green threads at language level, and providing memory access synchronization primitives to protect data in presence of concurrent access.
Go takes a different approach. The fundamental concurrent execution primitive is the goroutine, exposed by the language with the language keyword go
. Goroutines are managed by the Go runtime, which maps them transparently onto threads. While Go provides memory access and thread synchronization primitives at the language level via the sync
package, language guidelines do not exactly encourage their use, unless in very specific situations, such as within a small struct
scope. Go provides an alternative concurrency programming model in language, based on Communicating Sequential Processes (CSP), a theoretical model introduced by A. Hoare in the "Communicating Sequential Processes" 1978 ACM paper. This concurrency programming model uses channels, which are exposed at language level with the chan
keyword.
Goroutines
Channels
Memory Access and Thread Synchronization Primitives
The sync
package provides memory access and thread synchronization primitives.