Тёмный

Advanced Golang: Limiting Goroutines 

Code With Ryan
Подписаться 58 тыс.
Просмотров 27 тыс.
50% 1

Goroutines are powerful and make your program run faster. But with great power comes great... potential for an OOM (Out Of Memory) crash.

Опубликовано:

 

30 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 56   
@akhil_sai
@akhil_sai 5 месяцев назад
Thank you 3:40 It could be struct{} if it is just for signaling process, no memory allocation needed.
@daviidon
@daviidon Год назад
The technical term is a counting semaphore. It would be interesting to see the performance of using a pool instead of spawning new go routines.
@k98killer
@k98killer Год назад
I just started playing with Go last week. This morning, I wrote a chat server that uses a defacto pool of goroutines where each goroutine resets after the connection drops. I'm pretty stoked about it.
@riteshgsh
@riteshgsh 6 месяцев назад
​@@k98killer hey could u share the code?
@k98killer
@k98killer 6 месяцев назад
@@riteshgsh I found a bit later (after switching back to Python as my main language) that there were some bugs in it. I haven't yet figured out how the bugs are caused to fix them, so it's probably not the best example to reference.
@waldiniman
@waldiniman 4 месяца назад
@@k98killersuch is the nature of coding
@thingfish5271
@thingfish5271 Год назад
Ryan, great channel! One of the better channels for experienced devs wanting to grasp Go concepts quickly but communicated well enough for beginners to use.
@abiiranathan
@abiiranathan Год назад
Counting Semaphore pattern
@MrTyty527
@MrTyty527 Год назад
Have been doing Golang for a few months. These contents are great!
@LesterFernandezIO
@LesterFernandezIO Год назад
I love the diversity of content on this channel. I used to do game dev with Unity and I’ve been doing TypeScript for a while and now I’m getting into Go, so I relate a lot with your content 😂
@codewithryan
@codewithryan Год назад
Haha glad to hear!
@Dsouza10082
@Dsouza10082 6 месяцев назад
Amazing, one of the best so far, thank you !
@Draxen
@Draxen Год назад
Subscribing bro!! Just started learning GO myself after being a typescript dev for the last few years. Awesome content man!! Keep it up 🤘
@MattBolt35
@MattBolt35 Год назад
Would it be fair to say that the reason this application is being killed at the 200MiB limit is more about what the Process() func is allocating, and not really about the goroutines? I agree that for this specific use case, limiting the # of concurrently running goroutines will implicitly limit the number of concurrent Process() allocations being made? Goroutines are exceptionally lightweight at a 2kb stack. Busy backends can use thousands of goroutines no problem. You conveyed limiting the number of go routines running for the Process() function wonderfully. Go's memory allocation can make it frustrating to deal with, and I've found the bounded channel approach you explained here to be an amazing way to control concurrent memory-hungry functions. Great content sir!
@erix100100
@erix100100 Год назад
Great video with clear explanation!
@BryceChudomelka
@BryceChudomelka 7 месяцев назад
Single best explanation of why buffered channels. Thanks.
@nono-dw8yk
@nono-dw8yk Год назад
Hey, just to let you know that your content is pretty good, keep it up!
@Gabriel-eq1yu
@Gabriel-eq1yu 8 месяцев назад
GREAT go content! Thanks a lot for sharing.
@guhkunpatata3150
@guhkunpatata3150 5 месяцев назад
Great explanation. thank you Ryan!
@hardikvegad3508
@hardikvegad3508 3 месяца назад
You explain concepts very clearly can you please create a complete course on go... It would be helpful Thanks!
@BelgianNoise
@BelgianNoise Год назад
With all the respect, you look like someone who knows what he's talking about :) . And I am now using this in my application.
@baz_sh
@baz_sh 6 месяцев назад
This was a great video. It would be cool to be able to get at the code and play around with it.
@iskanderabbassi6256
@iskanderabbassi6256 Год назад
I love it
@mohammadseddighi5501
@mohammadseddighi5501 19 дней назад
are we gonna see any new video from this channel ? i found this channel today and its awesome
@user-dz6il2bx5p70
@user-dz6il2bx5p70 Год назад
Awesome content and explanation, thank you.
@ohLyln
@ohLyln 11 месяцев назад
Hey Ryan! This video was awesome I have never seen something like this and you presented it in a way I just intuitively grasped. On question: what is that streaming / events package? Is it in the stdlib? I have an app right now at work that needs to stream data and throttle it and it’s kind of an ugly mess and I think I could clean it up a ton with that package and what you showed here.
@tp1558
@tp1558 Год назад
I'm more interested in those monitoring bro. That's rad.
@sczoot6285
@sczoot6285 4 месяца назад
Not sure if you are avoiding this because you don't want to get into it in the scope of this video but if you are passing a completely arbitrary value as a signal to a chan you almost always want to use type of struct{}. There's several good articles on why this is by Dave Cheney and others but essentially it uses no storage and is perfect for the use case in the video
@arjundhar7729
@arjundhar7729 8 месяцев назад
There is no memory limiter @ the routine level I think. That would be cool to sandbox at the routine level instead of process level.
@rohitchoudhary1800
@rohitchoudhary1800 Год назад
nice
@themarksmith
@themarksmith Год назад
Excellent video, thank you - I'm learning Golang and I am interested in using Golang with WebSockets rather than RabbitMQ (which I've had a play with) - so any vids on that topic would be of interest...
@syamprasad6038
@syamprasad6038 Год назад
how you connected container with Go program, how the container showing memory usage when you run the Go program? can you make a detailed video on this one please
@ej.xxxx_
@ej.xxxx_ Год назад
docker stats
@sanketneema286
@sanketneema286 9 месяцев назад
Ryan how you are print the number of routines running concurrently.
@TheDavBag
@TheDavBag 11 месяцев назад
do we have a method to calculate our goroutines capacity? I mean not just pick on the go
@arjundhar7729
@arjundhar7729 8 месяцев назад
What's the video editing software you are using? I like the zoom and roam you do
@kitastro
@kitastro Год назад
one of the previews of this video has a typo
@mutazal-ashhab8068
@mutazal-ashhab8068 Год назад
Can you make the code public? If yes, could you add the dockerfile as well
@abishekkumar316
@abishekkumar316 Год назад
which tool is being used to visualize the memory, and CPU for docker?
@ej.xxxx_
@ej.xxxx_ Год назад
docker stats
@williamzapata6710
@williamzapata6710 27 дней назад
Hi What course do you recommend to learn Golang to make APIs and microservices?
@segeus
@segeus Год назад
What about usage of an empty structure (struct{}) for a signal channel? As far as I know an empty structs in go take nearly 0 byte.)
@jannachname168
@jannachname168 Год назад
this is true. he said "it could be anything you want" so empty struct is covert.
@amerispunk
@amerispunk 9 месяцев назад
Ryan this is the only video from you that I've seen but I just wanted to tell you that your audio sounds like it's over-driven and distorted. I think if you would cut back on your mic gain by around 30% you would sound a lot better. Otherwise your content is great.
@andohache
@andohache 11 месяцев назад
What about if ProcessEvent panic? Shouldn't we defer
@therelatableladka
@therelatableladka 2 месяца назад
Yess actually this is how it should be. Ryan actually just did that one to show what actually happens
@mohsanabbas6835
@mohsanabbas6835 Год назад
I encountered this disgusting 🤢 behavior in one of my app it occurred while topic lag processing, Go routine’s really can become ghost if you give them free hand
@hectordepablos9791
@hectordepablos9791 10 месяцев назад
cannot find package multithreading2/pkg/events, how do I install it, I can't recreate the example, what is the version of go? please!!
@isuryanarayanan506
@isuryanarayanan506 6 месяцев назад
yeah same, i cant find it anywhere
@AntonAverin
@AntonAverin Год назад
So Go doesn't have a concept of pool? That is a bit unfortunate as if you have many places in the codebase that use goroutines, managing this kind of limiting will be problematic.
@squ34ky
@squ34ky Год назад
It does. The `sync` package also provides some helpers to ease working with concurrency patterns including pools.
@Tarekconqueso
@Tarekconqueso 3 месяца назад
is my comment really an event ? checking out the dev tools dont mind me
@alexanderp4532
@alexanderp4532 Год назад
7:00 well, the way you did it is not efficient at all. You want to limit the number of goroutines by 10, so you know that at the same time you won't have more than 10 workers, why don't you use worker pool pattern instead of semaphore, which in the video? More efficient way is to not spawn and kill goroutine, which has a little overhead, because we need to allocate and clean stack for each goroutine, but to keep them running as much as possible
@vcool
@vcool 9 месяцев назад
Exactly. The author doesn't seem to know what he's doing. The overhead of goroutines makes it a bad idea to use them in such a disposable way when there are billions or trillions of events that need to be processed. He shows his bad pattern in multiple videos too. A worker pool would be more CPU efficient. Even with a worker pool, I check for system load to limit the number of active workers so as to prevent CPU contention.
@mydogiscoolasheck
@mydogiscoolasheck 3 месяца назад
​@@vcool The cost of spawning a goroutine is pretty small, and not everyone is dealing with billions or trillions of events. Author did a great job showcasing a simple strategy to avoid OOM panics.
Далее
КАК Я ЭТО СДЕЛАЛА?
00:13
Просмотров 257 тыс.
#kikakim
00:31
Просмотров 11 млн
Advanced Golang: Generics Explained
13:37
Просмотров 58 тыс.
Master Golang with Interfaces
21:54
Просмотров 10 тыс.
Monolith vs Microservices vs Serverless
23:05
Просмотров 76 тыс.
This Is The BEST Way To Structure Your GO Projects
11:08
Why I Use Golang In 2024
9:21
Просмотров 276 тыс.
Improve Go Concurrency Performance With This Pattern
34:16