Simplifying go-kit toolkit for Microservices – Part I

Introduction go-kit is one of the most complete and flexible toolkits for developing microservices in Go language. At the same time, the learning curve of go-kit is steep. In this post, I’m trying to explain go-kit fundamental components using general purpose client-server model of Linux. General Purpose Client-Server Architecture A server in Linux binds & … More Simplifying go-kit toolkit for Microservices – Part I

Why Using Golang sync Pool is a Bad Idea?

Not an absolutely bad idea, but you need a careful understanding before using sync Pool. Golang sync Pool is used to create a self-managed object pool, with just New/Get/Set functions. The Pool implementation uses a mutex based locking for thread-safe operations from multiple Go routines. Design Principles Golang sync. Pool use garbage collection to manage … More Why Using Golang sync Pool is a Bad Idea?

Why ‘cd’ is not an external command like ls?

cd command changes the current directory to desired valid path. The shell is a process that runs user commands. Each command is run by forking a new process and exec’ing. After exec, the child process dies. cd changes the current environment. If cd is an external command, the usual flow of fork->exec would cause environment … More Why ‘cd’ is not an external command like ls?

Go Runtime Scheduler Design Internals

Concurrency is one of the most exciting features of Go language. A single threaded program runs serially, but if you have tasks that can run concurrently, you create threads for such tasks. Threads execute independently and progress concurrently. Go supports creation of thousands of threads in an application!! How is it possible? It’s Go’s runtime. … More Go Runtime Scheduler Design Internals