Phuong Le
@func25
Followers
6K
Following
4K
Media
248
Statuses
849
Software Engineer @VictoriaMetrics
Joined August 2014
I have made thousands of static visualizations for Go, it's time to try something new: https://t.co/sQVmESgwXW
11
16
209
https://t.co/Wi4jbS2crv TL;DR Go Minimal language Very few features No syntactic sugar Lots of boilerplate Stable over years Easy to read Versatile slice type Automatic memory handling Team-oriented design Productivity focus Rust Feature-heavy language Zero-cost abstractions
7
7
195
VictoriaLogs v1.40.0 improves parsing speed for logs ingested via OpenTelemetry protocol by up to 10x (e.g. it reduces CPU usage by up to 10x)! Big thanks to @vadimaleksv for the pull request https://t.co/vRu7WIrsP3 !
github.com
Describe Your Changes TODO: Properly encode nested arrays Tests Also added more test cases compared to master to cover all decoding cases. Also fixed a case that behaved differently compared to...
6
9
87
Many articles make you think that go func() {} always gives you a goroutine with a 2 KiB stack. That's sometimes true, but not always. Go keeps a per-processor pool and a global pool of reusable goroutines, some with stacks already attached and some without. (diagram below)
5
20
159
Channels in Go are easy to get wrong unless you know the rules: - Sending to a channel panics if the channel is closed at any time before the send actually completes, even if the close happens "after" the send was started but before it has finished. - Receiving from a closed
6
39
303
Sometimes I receive private messages and emails from engineers who want to become a part of the VictoriaMetrics team. The best and the most reliable way to become our team member is to start helping other users with VictoriaMetrics products via GitHub issues, public Slack and
3
8
85
This repo lets you use the ? operator for error propagation in Go https://t.co/Lk96tI3icf A controversial project with the slogan: "Think TypeScript, but for Go."
16
9
122
Spotify successfully migrated from their internal observability system - Heoric - to VictoriaMetrics. This resulted in significant cost savings and improved user experience. https://t.co/07yHB1S7UC
6
20
200
How do std::Mutex and parking_lot::Mutex actually work under the hood? Which one is better?
blog.cuongle.dev
A teardown of Rust's mutex internals plus real benchmarks so you know when to choose std or parking_lot.
0
3
14
How we avoided significant size growth for VictoriaTraces executable (from 20MB to 28MB, +40%) while adding support for receiving traces via gRPC. This also reduced CPU usage and improved performance for traces' ingestion over gRPC.
In #VictoriaTraces, we run an HTTP2 server to handle gRPC calls, instead of using the common gRPC-Go package for a gRPC server. Not trying to persuade others to do so, but we did find it fun. The general idea is to avoid including things you don't need. https://t.co/gO29ECkLQu
4
4
61
In #VictoriaTraces, we run an HTTP2 server to handle gRPC calls, instead of using the common gRPC-Go package for a gRPC server. Not trying to persuade others to do so, but we did find it fun. The general idea is to avoid including things you don't need. https://t.co/gO29ECkLQu
victoriametrics.com
Why did VictoriaTraces build gRPC support without using gRPC-Go? And what are the benefits of adopting a simple HTTP/2 server and easyproto?
0
10
31
I really like this example because I prefer a simple writing style, extremely simple, even overly simple. But the wrong takeaway here might be using "Don't seek a library" for such a simple example
You need a simple Go cache? Don't seek a library, just make a package and add the methods you need. You would be surprised at what you're capable of when you just create things yourself. Just unlock your power,
15
4
88
120+ diagrams done: memory, goroutine stack, garbage collection, all visualized. Coming soooon!
6
45
691
My book simplifies Go internals as much as possible, so it's very easy to understand. If you still don't get it, it's Go's fault 🙈
12
59
1K
CPU Cache-Friendly Data Structures in Go: 10x Speed with Same Algorithm
skoredin.pro
False sharing killed our performance. Data-oriented design saved it.
4
73
427
Redrawing Chapter 7: How Go Memory Allocation Works. Still a long way to go, but really excited to be creative
16
45
735
I'm hiring for senior Go engineers to join us at @ona_hq! If you are: - AI native; using tools like Cursor, Claude code and Ona daily. - Are excited about building AI agents and the mission control platform that they will run on, entirely in Go. - Have 3-5 years of production Go
14
32
189
🔥 You can pass an expression to new() to directly get a pointer to its result, starting in Go 1.26. Before Go 1.26, you could only do new(Type) to get a pointer to the zero value of that type The new behavior new(expr) is syntactic sugar for: tmp := expr result := &tmp But
8
12
115
I wrote a post covering advanced Pattern Matching and best practices in Rust. It received a lot of likes on Reddit. Check it out here:
blog.cuongle.dev
Rust’s pattern matching feels simple enough: match on enums, destructure tuples, handle Option and Result.
0
2
14