Forwarded from 🇺🇦 Go performance channel (Oleg Kovalov)
In #Golang 1.20 the Go team introduced an experimental new method of memory management called Go arenas.
In this blog post we show how we combined continuous profiling with memory arenas to improve performance of one of our cloud services by ~8% !
https://pyroscope.io/blog/go-1-20-memory-arenas/
In this blog post we show how we combined continuous profiling with memory arenas to improve performance of one of our cloud services by ~8% !
https://pyroscope.io/blog/go-1-20-memory-arenas/
pyroscope.io
Go 1.20 Experiment: Memory Arenas vs Traditional Memory Management | Open Source Continuous Profiling Platform
Go 1.20 Experiment with Memory Arenas
Slides of my talk: "Debugging concurrent programs in Go" in go dev room
https://drive.google.com/file/d/1GoGuQNndiubchq5AjdaHjbaeg29hn6R7/view?usp=sharing
https://drive.google.com/file/d/1GoGuQNndiubchq5AjdaHjbaeg29hn6R7/view?usp=sharing
My talk has been highlighted in #golang weekly 🤘 https://golangweekly.com/issues/448
Go linters configuration, the right version.
https://olegk.dev/go-linters-configuration-the-right-version
https://olegk.dev/go-linters-configuration-the-right-version
Oleg Kovalov's Blog
Go linters configuration, the right version.
TLDR: See the golangci-lint config that I find useful Github Gist
Intro
Ah, these mighty linters. Tools that intend to make our life better but might hurt our software engineering egos.
Somewhere in 2018, I was super eager to make my code and others...
Intro
Ah, these mighty linters. Tools that intend to make our life better but might hurt our software engineering egos.
Somewhere in 2018, I was super eager to make my code and others...
Forwarded from Max
Друзі! Ви, напевно, пам'ятаєте, як я робив збори для хлопців із ЗСУ та інших підрозділів. Хлопців, яких знаю особисто.
Не так давно ми разом з вами вже зробили велику справу — зібрали на два Mavic 3 Combo, Starlink і інші, не меньш важливі на війні штуки. Військові за це ДУЖЕ вдячні вам всім! Але добрих справ в такий час не буває забагато.
Маємо запит на автівку для наших воїнів ССО. Ціль — 260 000 гривень. Допоможемо хлопцям створити для окупанта пекло на нашiй землі.
Кожна гривня, кожен репост — ще один крок до нашої перемоги. Дуже вам вдячний!
🔗Посилання на банку
https://send.monobank.ua/jar/13NzQaQmS
💳Номер картки банки
5375 4112 0530 6157
Paypal: [email protected]
Не так давно ми разом з вами вже зробили велику справу — зібрали на два Mavic 3 Combo, Starlink і інші, не меньш важливі на війні штуки. Військові за це ДУЖЕ вдячні вам всім! Але добрих справ в такий час не буває забагато.
Маємо запит на автівку для наших воїнів ССО. Ціль — 260 000 гривень. Допоможемо хлопцям створити для окупанта пекло на нашiй землі.
Кожна гривня, кожен репост — ще один крок до нашої перемоги. Дуже вам вдячний!
🔗Посилання на банку
https://send.monobank.ua/jar/13NzQaQmS
💳Номер картки банки
5375 4112 0530 6157
Paypal: [email protected]
Forwarded from 🇺🇦 Go performance channel (Oleg Kovalov)
High-performance JSON parsing in #golang by @CockroachDB
https://www.cockroachlabs.com/blog/high-performance-json-parsing/
https://www.cockroachlabs.com/blog/high-performance-json-parsing/
Cockroachlabs
High-performance JSON parsing in Go
This blog post is an exploration of JSON parser performance, and, ultimately, a description of the high-performance JSON parser used in CockroachDB.
Repo with some examples of concurrency patterns in Golang ->
https://github.com/lotusirous/go-concurrency-patterns
https://github.com/lotusirous/go-concurrency-patterns
GitHub
GitHub - lotusirous/go-concurrency-patterns: Concurrency patterns in Go
Concurrency patterns in Go. Contribute to lotusirous/go-concurrency-patterns development by creating an account on GitHub.
Forwarded from 🇺🇦 Go performance channel (Oleg Kovalov 🇺🇦)
print(“lol”) doubled the speed of my #golang function 😂
https://medium.com/@ludirehak/printing-lol-doubled-the-speed-of-my-go-code-e32e02fc3f92
https://medium.com/@ludirehak/printing-lol-doubled-the-speed-of-my-go-code-e32e02fc3f92
Medium
print(“lol”) doubled the speed of my Go function
Here is a Go function, if_max(). It finds the max value of an array of integers. Simple enough:
Limit goroutines with buffered channels
https://rednafi.com/go/limit_goroutines_with_buffered_channels/
https://rednafi.com/go/limit_goroutines_with_buffered_channels/
Redowan's Reflections
Limit goroutines with buffered channels
I was cobbling together a long-running Go script to send webhook messages to a system when
some events occur. The initial script would continuously poll a Kafka topic for events and
spawn new goroutines to make HTTP requests to the destination. This had two…
some events occur. The initial script would continuously poll a Kafka topic for events and
spawn new goroutines to make HTTP requests to the destination. This had two…
"I thought I understood how iteration over an array works but apparently not in Golang"
https://medium.com/@haaawk/i-thought-i-understood-how-iteration-over-an-array-works-but-apparently-not-in-golang-441a7abd6540
https://medium.com/@haaawk/i-thought-i-understood-how-iteration-over-an-array-works-but-apparently-not-in-golang-441a7abd6540
Medium
I thought I understood how iteration over an array works but apparently not in Golang
I’ve recently learned about a surprising Golang behavior. You can significantly speed up the iteration over an array by doing:
Finally we can use it without many lines of
Tl;dr:
With all that out the way, we can use a heredoc, executing two commands in the same RUN!:
->
https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/
/
and &&
Tl;dr:
With all that out the way, we can use a heredoc, executing two commands in the same RUN!:
RUN <<EOF
echo "Hello" >> /hello
echo "World!" >> /hello
EOF
->
https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/
Docker
Introduction to heredocs in Dockerfiles | Docker
Learn from Docker experts to simplify and advance your app development and management with Docker. Stay up to date on Docker events and new version
Slides of my talk from #kcdaustria about debugging #golang apps inside #k8s cluster
https://drive.google.com/file/d/1-6ERQda23o7OiLHziz4wwgvdFWS0kyv8/view
And repo with samples/Dockerfiles for try it out!
https://github.com/andriisoldatenko/debugging-containerized-go-applications
https://drive.google.com/file/d/1-6ERQda23o7OiLHziz4wwgvdFWS0kyv8/view
And repo with samples/Dockerfiles for try it out!
https://github.com/andriisoldatenko/debugging-containerized-go-applications
GitHub
GitHub - andriisoldatenko/debugging-containerized-go-applications: Different debug examples for dockerized Go application
Different debug examples for dockerized Go application - andriisoldatenko/debugging-containerized-go-applications
Discussion of 1BRC in Go https://github.com/gunnarmorling/1brc/discussions/67
Context: https://twitter.com/gunnarmorling posted a problem https://www.morling.dev/blog/one-billion-row-challenge/ the idea is pretty simple and from another side not so simple:
>write a Java program for retrieving temperature measurement values from a text file and calculating the min, mean, and max temperature per weather station. There’s just one caveat: the file has 1,000,000,000 rows!
Context: https://twitter.com/gunnarmorling posted a problem https://www.morling.dev/blog/one-billion-row-challenge/ the idea is pretty simple and from another side not so simple:
>write a Java program for retrieving temperature measurement values from a text file and calculating the min, mean, and max temperature per weather station. There’s just one caveat: the file has 1,000,000,000 rows!
GitHub
1BRC in Go · gunnarmorling/1brc · Discussion #67
Completes in ~20s on my machine, see https://github.com/AlexanderYastrebov/1brc/tree/go-implementation/src/main/go ~$ go version go version go1.21.4 linux/amd64 ~$ uname -r 4.15.0-213-generic ~$ ca...
Go’s CompareAndSwap is not always Compare-and-swap
>Go's standard package sync/atomics provides programmers with functions to use the underlying CPU-level atomic operations such as compare-and-swap (CAS), through atomic.CompareAndSwapT (where T is an integer type).
> Problem: Not all CPU architectures offers a CAS instruction to rely on to implement atomic.CompareAndSwapT. However, Go must compile that function code to something semantically equivalent—let's see what.
https://lu.sagebl.eu/notes/go-cas/
>Go's standard package sync/atomics provides programmers with functions to use the underlying CPU-level atomic operations such as compare-and-swap (CAS), through atomic.CompareAndSwapT (where T is an integer type).
> Problem: Not all CPU architectures offers a CAS instruction to rely on to implement atomic.CompareAndSwapT. However, Go must compile that function code to something semantically equivalent—let's see what.
https://lu.sagebl.eu/notes/go-cas/
Forwarded from 🇺🇦 Go performance channel (Oleg)
Hiring Challenge: Smallest #golang Websocket Client
https://dyte.io/blog/hiring-challenge-smallest-golang-websocket-client/ by @dyte_io
https://dyte.io/blog/hiring-challenge-smallest-golang-websocket-client/ by @dyte_io
Dyte
Hiring Challenge: Smallest golang Websocket Client
Learn to create a compact Go program for a websocket server, optimizing the binary size. Insights from a Dyte hiring challenge.