concurrency

module
v0.0.0-...-582792c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 12, 2020 License: MIT

README

Includes golang concurrency design patterns and best practices:

  • Golang concurrency architecture such as pipeline, fan in/out, race-to-finish.
  • Go routine lifetime control with self cancelling go routines or external signals to complete go routines.
  • Returning error from Go routines though context or error channels.
  • Benchmarking to demonstrate the effective go routine spin, limiting number of workers to achieve execution speed, analysing performance bottlenecks.

simple concurrency with go routines:

  • 2/2 simple go routine to handle connections concurrently
  • 1/2 limit the number of connections

go routine lifetime

  • 1/2 go routine signalling finish
  • /2 waiting for go routines
  • 2/2 cancelling go routines
  • 1/2 returning error from go routines
  • 3/3 timeout from go routine ( extra )
  • 1/3 context timeout (extra)

benchmarking

  • /3 benchmarking with go routines
  • /3 execution of a task with concurrency vs single thread of execution comparison
  • /2 stack growth of go routines
  • /5 garbage collection and go routines
  • /5 channel buffering for fast execution
  • /5 limiting number of go routines executing concurrently

architectures ( channels & go routines )

  • 1/1 pipeline
  • 1/1 select statement and infinite loop
  • 2/2 limiting number of workers ( extra )

/37 total + /13 extra points that can be added concurrency

@todo: time.After in case statement, stack growth ( downsides of using time.After in case statement ) @todo: release semaphores as a FILO manner

Directory structure and files

.
├── handleconn                  # handle incoming connections
|   ├── example1                # read/write n bytes at a time, should better handle the read/write buffering
|   ├── example2                # improves example 1 by using bufio to read/write, fixed the issue with writing more than necessary bytes, logs when closing connection
|   ├── example3                # uses io.Copy
|   ├── example4                # limit number of connections
├── architecture                #
|   ├── simplepipeline          # a barebone pipeline demonstrator
|   ├── simplepipeline2         # cancel go routines
|   ├── limitedworkers          # limited workers
|   ├── workersrace             # multiple workers working on same task, first to finish wins
├── lifetime                    # 
|   ├── closuretimeout          # simple query to dB with timeout packed in closure
|   ├── internaltimeout         # forselect loop that times out
|   ├── externaltimeout         # external channel signals timeout
|   ├── exitgoroutines          # exit with exit channel closure broadcast
|   ├── returnerror             # 
|   ├── contexttimeout          # timeout if context expires
|   ├── contextcancel           # go routine cancelled by another go routine
├── README.md                   # this file

Directories

Path Synopsis
architecture
limitedworkers command
selectloop command
simplepipeline command
simplepipeline2 command
workersrace command
handleconn
example1 command
example2 command
example3 command
example4 command
lifetime
closuretimeout command
contextcancel command
contexttimeout command
exitgoroutines command
externaltimeout command
internaltimeout command
returnerror module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL