The future of latency profiling in Go

Note: This article contains non-finalized ideas; we may end up not implementing any of this but ideally we should do work towards the direction explained here. Go is the language to write servers, Go is the language to write microservices. Yet, we haven’t done much in the p...

Go's work-stealing scheduler

Go scheduler’s job is to distribute runnable goroutines over multiple worker OS threads that runs on one or more processors. In multi-threaded computation, two paradigms have emerged in scheduling: work sharing and work stealing. Work-sharing: When a processor generates ne...

Interface Semantics

Prelude If you want to put this post in some better context, I suggest reading the following series of posts, which lay out some other fundamental and relevant design principles: Language Mechanics On Stacks And Pointers Language Mechanics On Escape Analysis Language Mechanics O...

Chunking large messages with gRPC

Using gRPC server-side streaming with binary blobs

Throttling resource intensive requests

OOM errors hate this one weird trick

What I Learned From Hacking Video Games

GopherJS Integration Tests

With friends Qunit, Ginkgo and Agouti

Using different Git emails

Usually at work and at home we use different Git name/email pairs, or even per project. Pushing with correct email guarantees that your commits will be authored with a correct user identity.

Profiler labels in Go

Go 1.9 is introducing profiler labels, a way to add arbitrary key-values to the samples collected by the CPU profiler. CPU profilers collect and output hot spots where the CPU spent most time in when executing. A typical CPU profiler output is primarily reports the location of th...

GKE in production

I’ve been working with DigitalOcean, Heroku and AWS for some years now.