Inverted worker thread pool pattern from Rethinking Classical Concurrency Patterns
var sem = make(chan struct{}, limit)
func start() {
for _, task := range hugeSlice {
sem <- struct{}{}| #!/usr/bin/env bash | |
| set -euo pipefail | |
| # Step 1: Extract the last element of the module name from go.mod | |
| if [[ ! -f "go.mod" ]]; then | |
| echo "Error: go.mod not found in current directory." >&2 | |
| exit 1 | |
| fi | |
| module_name=$(awk '/^module / {print $2}' go.mod) |
| Hello, Gist! | |
| (this Gist is used for testing purposes) |
Go sets the default buffer size of na new bufio.Scanner to 4096 bytes. I've scanned a ~155MB file with an average line length of 62 bytes with smaller and larger buffer sizes. Here are the results running on a 2019 x86 MacBookPro:
file size: 155605069
lines: 2501619
avg line length: 62.20
1024: 182.103886ms
2048: 116.351501ms
| #!/usr/bin/python | |
| # This is used for calculating of birthday paradox for large values | |
| # We're using approximation explained here: http://preshing.com/20110504/hash-collision-probabilities/ | |
| # Beware that approximation isn't very precise at smaller params N and K, but gets more precise with large numbers | |
| # see https://docs.python.org/3/library/decimal.html#module-decimal | |
| from decimal import * | |
| # setting decimal precision |
| package main | |
| import ( | |
| "sync" | |
| "sync/atomic" | |
| "testing" | |
| ) | |
| func BenchmarkClosedChannel(b *testing.B) { | |
| c := make(chan struct{}) |
| package main | |
| import ( | |
| "fmt" | |
| "time" | |
| ) | |
| func main() { | |
| defer func() { | |
| if r := recover(); r != nil { |
| package main | |
| import "fmt" | |
| func defer1() { | |
| var s = "Hello!" | |
| defer fmt.Println(s) | |
| s = "Ahoy!" | |
| } |
Redis HLL has a 16 bytes header:
struct hllhdr {
char magic[4]; /* "HYLL" */| package main | |
| import ( | |
| "bufio" | |
| "github.com/mediocregopher/radix/v3" | |
| "github.com/mediocregopher/radix/v3/resp" | |
| "net" | |
| "testing" | |
| ) |