|
You are here |
konradreiche.com | ||
| | | | |
jbrandhorst.com
|
|
| | | | | Sometimes when you're writing a server, you've got a function that consumes a lot of memory while running, or some other resource, and you might be worrying that a sudden burst of requests could crash the server, since gRPC by default will just spawn another goroutine to handle any incoming requests, oblivious to the danger. In these situations, it can be useful to implement some custom request throttling. Here I'll show an easy way to accomplish this with the use of a Go channel. | |
| | | | |
hjr265.me
|
|
| | | | | Concurrency is one of the central features of Go. And, to build concurrent programs in Go, you need goroutines. A goroutine is like a thread, but lighter. Much lighter. And, like any other built-in feature of Go, using it is dead simple: 1 2 3 4 5 6 7 package main func main() { go func() { println("Hello World") // Print "Hello World" from a different goroutine. }() } Wait. That didn't print anything. | |
| | | | |
matttproud.com
|
|
| | | | | Pop quiz, hot shot: what is the behavior of func f (as defined below) when it is called from a bare gRPC method or HTTP handler as go f(ctx) using the context.Context provided to the handler?1 1 2 3 4 5 6 7 8 9 10 11 func f(ctx context.Context) { // Flimsily make it improbable for this function to continue while the // handler is serving. time.Sleep(time.Second) select { case <-time. | |
| | | | |
blog.nobugware.com
|
|
| | | How to load balance gRPC servers with Envoy or Nghttp2 | ||