Go Concurrency

Go Concurrency

1、A goroutine is a lightweight thread managed by the Go runtime.

  Go Concurrency

2、Channels are a typed conduit through which you can send and receive values with the channel operator, <-.

  Go Concurrency

3、Like maps and slices, channels must be created before use:

  Go Concurrency

  By default, sends and receives block until the other side is ready. This allows goroutines to synchronize without explicit locks or condition variables.

  Go Concurrency

4、Channel会缓存。

  Go Concurrency

5、A sender can close a channel to indicate that no more values will be sent. Receivers can test whether a channel has been closed by assigning a second parameter to the receive expression: after

  Go Concurrency

  ok is false if there are no more values to receive and the channel is closed.

  The loop for i := range c receives values from the channel repeatedly until it is closed.

  Note: Only the sender should close a channel, never the receiver. Sending on a closed channel will cause a panic.

  Another note: Channels aren't like files; you don't usually need to close them. Closing is only necessary when the receiver must be told there are no more values coming, such as to terminate a range loop.

  Go Concurrency

6、The select statement lets a goroutine wait on multiple communication operations.

  A select blocks until one of its cases can run, then it executes that case. It chooses one at random if multiple are ready.

  Go Concurrency

  Go Concurrency

7、The default case in a select is run if no other case is ready.

  Use a default case to try a send or receive without blocking:

  Go Concurrency

参考:https://tour.golang.org/concurrency/1

你可能感兴趣的:(concurrency)