message any){ switch m := message.(type) { case *lib.Start: r.writerPool = r.writerPoolProducer () case *lib.Stop: r.writerPool.Stop() default: r.writerPool.Submit(func() { err := r.ProcessWriteMessage (actx, m) // 永続化処理 … if // リトライ可能なら再送信 actx. Logger().Warn("failed to write message; message will be requeued" … actx. Send(actx.Self(), m) }
Programming Language and Environment • Analysis of the Go runtime scheduler • The Go scheduler • Go が他の多くの言語での非同期プログラミングよりも優れている理由 • Futures, Async, and Actors • メッセージとイベントを中核に置いたシステム設計の有用性について • 徐々に高度になるリングバッファの話