golangと並列化

 

golangの並行処理のサポート

Golangの特徴の一つとして並行処理のサポートが充実しておいることが挙げられる。よってgolangミドルウェアの開発などにも適しているとされている.

Goでは,goroutineという軽量スレッドを用いて処理を並行に実施し,同時に実行されているゴルーチンの間ではchanelという機能でデータをやりとりするしくみが備わっている*1

www.slideshare.net

 

 

理解すべき概念 : 

  • gorutine ( 名前はcoroutineのもじり )*2
  • channel : 処理の競合を回避。データのやりとりをするときに使用(MPIのsend recive みたいなものか?)

                 select : 複数のチャネルから同時に受信  

 特筆すべき注意点

  • goroutineを作成するコストは極めて小さい*3

 

    Frequently Asked Questions (FAQ) - The Go Programming Language

*1:並行処理を行うプログラムの相互作用パターンを記述するためのCSP(Communicating Sequential Processes)を採用している.

*2:coroutineとの違いとしては

  • 1. goroutineは並列化の概念を含む。coroutineは並列化とは関係のない概念である。
  • 2 . goroutineはchanelと呼ばれる機能によって互いに通信する。一方coroutine 同士の通信にはyield やresumeと呼ばれる演算子を利用する

    *3: goroutineは、マルチコアCPUで同時実行可能であり、Javaのスレッドなどに比べリソース消費が極めて小さい。