Skip to content

Instantly share code, notes, and snippets.

@meysampg
Created August 31, 2023 16:27
Show Gist options
  • Select an option

  • Save meysampg/79a0b909cdb6a227c0fe634b7762d24f to your computer and use it in GitHub Desktop.

Select an option

Save meysampg/79a0b909cdb6a227c0fe634b7762d24f to your computer and use it in GitHub Desktop.
Aspect Cooperative Multitasking (General) Go's Concurrency Model (Goroutines and Channels)
Control Transfer Tasks yield control voluntarily. Goroutines yield control voluntarily or at specific points. They can also explicitly yield using runtime.Gosched().
Scheduling Responsibility Tasks are responsible for yielding control. Go's runtime scheduler is responsible for managing goroutine execution.
Task Cooperation Tasks must cooperate to ensure fairness. Goroutines cooperate by yielding control, but the scheduler can preemptively switch them as well.
Deadlock Risk Risk of deadlock if tasks don't yield. Similar risk of deadlock if goroutines don't yield or release resources.
Resource Sharing Resource sharing depends on task cooperation. Goroutines share resources, but channels provide a safe way to coordinate access.
Isolation Limited isolation between tasks. Strong isolation between goroutines, as they have separate stacks and execution contexts.
Responsiveness Depends on task cooperation for responsiveness. Goroutines can yield control, allowing other goroutines to run and maintain responsiveness.
System Stability Can be impacted by misbehaving tasks. Go's runtime scheduler can prevent one misbehaving goroutine from affecting others.
Protection and Security Less protection against malicious tasks. Strong protection as goroutines are managed by the runtime, preventing rogue behavior.
Complexity and Overhead Simpler context switching, lower overhead. Efficient context switching due to lightweight goroutines and cooperative scheduling.
Common Environments Some user-level thread libraries, JavaScript event loops. Go's concurrency model, using goroutines and channels.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment