Объясни модель concurrency в Go: goroutines vs threads, channels, select. Когда buffered, когда unbuffered? Что такое "share by communicating"?