Giter Club home page Giter Club logo

concurrency-patterns's Introduction

Go Concurrency Patterns

Examples taken from Rob Pike's talk about concurrency patterns.

Go Concurrency Patterns video:

https://www.youtube.com/watch?v=f6kdp27TYZs

Notes from Rob's talk

"The composition of independently executing computations" -- Rob Pike

Concurrency not parallelism. On a single core, you can't have parallelism.

Concurrency

  • Easy To Understand
  • Easy To Use
  • Easy To Reason
  • Work at a Higher Level

Concurrency is not new

Hoare's CSP Paper in 1978

  • Occam ('83), Erlang ('86), Newsqueak ('88), Concurrent ML ('93), Alef ('95), Limbo ('96)

Go is a Branch of:

Newsqueak-Alef-Limbo using Channels

Goroutines

  • Independently executing function
  • Has its own stack which grows and shrinks
  • Very Cheap, could have thousands or more
  • Not a thread
    • Could have only one thread running thousands of goroutines
  • Goroutines are multiplexed dynamically onto threads as needed to keep routines running
  • Could think of it as a very cheap thread

Buffered Channels

  • Channels can be created with a buffer
  • Buffering removes synchronization
  • Can be important for some problems but they are more subtle to reason about
  • Not using them today

Summary

  • Started With
    • Slow, Sequential and Failure-Sensitive code
  • Ended With
    • Fast, Concurrent, Replicated and Robust code

Other Patterns

Chatroulette Toy:
http://tinyurl.com/gochatroulette

Load Balancer:
http://tinyurl.com/goloadbalancer

Concurrent Prime Sieve:
http://tinyurl.com/gosieve

Concurrent Power Series (by Mcllroy)
http://tinyurl.com/gopowerseries

concurrency-patterns's People

Contributors

ardan-bkennedy avatar i-sevostyanov avatar jcbwlkr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

concurrency-patterns's Issues

Comments on Message receive and wait channel misleading

Certain comments in the sequencing pattern imply Joe's goroutine will generate the first received Message struct followed by Ann's:

msg1 := <-c // Waiting on someone (Joe) to talk
fmt.Println(msg1.str)
msg2 := <-c // Waiting on someone (Ann) to talk
fmt.Println(msg2.str)
msg1.wait <- true // Joe can run again
msg2.wait <- true // Ann can run again

However, the code doesn't explicitly define a Happens Before dependency to ensure this ordering. Therefore, it's possible that Ann's Message struct will precede Joe's resulting in the variable msg1 containing Ann's message, not Joe's as suggested by the comments.

If a strict Round-robin ordering is desired, the following implementation delivers the same outcome while eliminating the wait abstraction and its associated code.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.