Go Concurrency Explained: Go Routines & Channels

  Рет қаралды 80,261

Melkey

Melkey

Күн бұрын

Пікірлер: 145
@MelkeyDev
@MelkeyDev Жыл бұрын
I hope you all enjoyed this GO LANG video! Your comments mean the world to me. We are SO CLOSE to 5k subs!
@agustingomez7172
@agustingomez7172 Ай бұрын
nice video, can I use it in my page in a future as an example of the difference between normal process vs using go routine and channels?
@ohLyln
@ohLyln Жыл бұрын
Great video for those unfamiliar with goroutines! One way to estimate how much faster this will make your code is like this: the first way of running it just one after another in a loop will take the time to call a + the time to call b + time to call c etc. When using goroutines, these are all running at the same time, however you're waiting for the collection of them to finish (using wg.Wait()). This means you will be held back by the *slowest* single call whether its a or b or c etc.
@MelkeyDev
@MelkeyDev Жыл бұрын
Thanks for the info!
@guhkunpatata3150
@guhkunpatata3150 11 ай бұрын
great insight. is it safe to assume that it is an issue ? if yes, is there any way to overcome this issue?
@ohLyln
@ohLyln 11 ай бұрын
@@guhkunpatata3150 no its not an issue at all. It's the whole point of using goroutines. They allow you to take something that say runs 5 times each x amount of seconds and go from 5x to just 1x of time.
@LunodzoMwinuka
@LunodzoMwinuka Ай бұрын
This is insightful. Are there better alternatives?
@VikingPingvin93
@VikingPingvin93 Жыл бұрын
Great video. Just mentioning that the speed gain is much more visible if you don't only test for 4 API calls, but for a 100 or 1000.
@MelkeyDev
@MelkeyDev Жыл бұрын
Good point!
@brunomello7499
@brunomello7499 11 күн бұрын
Just a tip: instead of modifying the fetch function to use channels and go routines, should probably just encapsulate the function call inside ankther function and handle channel communication from there go func() { fetch(...) ... } This way you don't change the fetch function behaviour and it can be used both with and without go routines
@Nintron
@Nintron Жыл бұрын
2:06 I'm so used to Prime screaming TOKKKIIOOOOO I half expected Melkey to do that here...
@headlights-go-up
@headlights-go-up Жыл бұрын
I seriously love and value these videos about Go's main features.
@MelkeyDev
@MelkeyDev Жыл бұрын
I should do more then??
@kkebo
@kkebo Жыл бұрын
@@MelkeyDev Definitely please! Really useful for someone who is currently learning Go like me
@headlights-go-up
@headlights-go-up Жыл бұрын
@@MelkeyDev yes please, mi lord
@hanzofuma
@hanzofuma Жыл бұрын
Today I had to make an application that parses a tsv file with 25k+ lines and make some requests to get other data using apis over an interval of time and caches the results. as a newbie to Go I thought it's time to learn goroutines and then I opened Firefox going to Go tour I found your video In the 1st Row lol what a timing. Thanks for the video 😁.
@MelkeyDev
@MelkeyDev Жыл бұрын
Hell yeah my pleasure
@ed223-p5g
@ed223-p5g Жыл бұрын
why do you execute the wg.Wait and the channel close in a goroutine?
@yooos3
@yooos3 6 ай бұрын
Amazing! I recently joined a new company and right now I see the code written to process 1.3G of json data is done with single thread in Java! We are switching to golang and migrating our etl process too, go routines will definitely cut short the processing time from 8 hours to ~2 hours or less. Already did some POC and just like you mentioned, I am seeing more than 3 times better performance in prod environment!
@Bleedpool
@Bleedpool Жыл бұрын
very quickly and simply explained Goroutines, appreciate it!
@MelkeyDev
@MelkeyDev Жыл бұрын
Glad it was helpful!
@BbB-vr9uh
@BbB-vr9uh 7 ай бұрын
Came to learn to do exactly this. Wanted to call the same api endpoint for multiple inputs and not wait for them all sequentially.
@MelkeyDev
@MelkeyDev 7 ай бұрын
Hopefully this was helpful!
@adobko
@adobko 5 ай бұрын
I am a total novice in Go, but watching this video showd me so much cool grifs , forexample that anonymous function to close the wait group, or the fact of being abel to put struct into struct, it was awesome, thanks.
@anarbekomurzakov8089
@anarbekomurzakov8089 Ай бұрын
Hey, Melkey this is really great one, enjoyed it! I wonder it would be great if one day you could build a complete demo project with goroutines 🙂
@ethaaan467
@ethaaan467 8 ай бұрын
simple and on point. great videos bro!
@AsToNlele
@AsToNlele Жыл бұрын
My favourite part was when Go said it's Going time and went way too fast Great video
@MelkeyDev
@MelkeyDev Жыл бұрын
Glad you liked it!
@zeroxthree
@zeroxthree Жыл бұрын
7:37, dude i scared me
@erkropka
@erkropka Жыл бұрын
Sorry, I do not know if someone has already mentioned it but in the second case you do not print the temp of the city but just the name of the city ;) I hope this is fixed in the code example if you are sharing it.
@deniswarsidin9402
@deniswarsidin9402 4 ай бұрын
Most important thing the return data in weather function was useless.
@fliplucky8813
@fliplucky8813 Жыл бұрын
- saw this video - was working .... Alright, time for a break and watch MelkyDev
@MelkeyDev
@MelkeyDev Жыл бұрын
Its melkey time baybay
@axMf3qTI
@axMf3qTI 8 ай бұрын
So what does the wait group and channels do? If that only needed if you return something from the function. When I look up go routines I get an example with the go keyword but no mention of wait group or channels.
@mushroom_noodles
@mushroom_noodles 8 ай бұрын
goroutines communicate between each other using channels. this way we can send and receive data from different goroutines running concurrent or parallel. when it comes to wait group, it is usually used to synchronise all goroutines since some of them may execute faster than another. for example, when running a program with go funcs() in it, main function may execute faster than all the goroutines and you will simply end up doing nothing. you can fix this by using sync.WaitGroup{} so the main function will wait for the group to execute before shutting down the application. those are also used to prevent deadlocks in your app
@konradpiotrowski9549
@konradpiotrowski9549 6 ай бұрын
Basically in his example it is used only for making sure when to close the channel. Not closing might (but not necessarily) lead to data leak
@SniboyPL
@SniboyPL Жыл бұрын
"concept of executing multiple tasks simultaenously by utilizing all available resources more effectively" - isn't this parallelization and not concurrency?
@jyuart
@jyuart 11 ай бұрын
I’ve heard (and maybe I misunderstood the point) that one of the main advantages of go routines over other languages utilizing async is that you don’t have to rewrite your functions. You just add go at the beginning at that’s it. But from what I’m seeing it’s applicable only to functions that do not return anything. If you function returns any value, any you want to run it with go, you’d need to add a channel as an argument to be able to pass the return value back to the caller. Is that correct?
@MelkeyDev
@MelkeyDev 11 ай бұрын
The only way to communicate between GO routines is through channels
@ameerhamza4816
@ameerhamza4816 7 ай бұрын
entertaining and informative thanks
@MelkeyDev
@MelkeyDev 7 ай бұрын
Glad you enjoyed it
@shoxruhxonismoilov-nw8zb
@shoxruhxonismoilov-nw8zb 7 ай бұрын
Great video, I'd like to ask you to do more big projects in the Go programming language. This would be a great experience for language learners !
@dwdtalks
@dwdtalks 10 ай бұрын
Amazing
@vaster1142
@vaster1142 Жыл бұрын
I'm subscribing.
@emil_l889
@emil_l889 Жыл бұрын
WE WANT MORE
@developertools95
@developertools95 25 күн бұрын
is that same of eventloop concept in js?
@laureal1699
@laureal1699 7 ай бұрын
where can I review the full code bro?
@dixon2233
@dixon2233 8 ай бұрын
He's not wrong when he started off off with "We all like go" lmao
@astrocanyounaut
@astrocanyounaut Жыл бұрын
god dang- mans is fr making me wanna switch to go from rust 😖 awesome vid!!! 2x a week bayBEE 🔥
@MelkeyDev
@MelkeyDev Жыл бұрын
Bruh RUST is SO old
@johnjohnes698
@johnjohnes698 8 ай бұрын
it would be nice if you brought a bit less of drama, you are overplaying
@MelkeyDev
@MelkeyDev 8 ай бұрын
Did you put this in the correct video?
@abdurahmanmohamed4732
@abdurahmanmohamed4732 2 ай бұрын
Consider keeping the code zoomed in, it's really hard to follow this way, and the recycling between the zoom in and out is causing me headache.
@mamg301988
@mamg301988 Жыл бұрын
great video, and What keyboard do you have?
@MelkeyDev
@MelkeyDev Жыл бұрын
I use the Moonlander
@caballerosalas
@caballerosalas 8 ай бұрын
The video starts at 1:28
@JaffyMaglinte
@JaffyMaglinte 5 ай бұрын
Thank you!!!
@hardikvegad3508
@hardikvegad3508 6 ай бұрын
why dont u make a course on go, it will be lot helpful. Thanks!
@_thisisnotjohn
@_thisisnotjohn Жыл бұрын
Gj 👏👏 What about making a tutorial where you build a simple cli tool in GO?
@codelinx
@codelinx Жыл бұрын
what i would like to see is advanced looping structures, more specifically related to algos or solving algos using some of these crazy loops and 2/3 pointer techniques with for loops.
@SanFranciscoCyclist
@SanFranciscoCyclist Жыл бұрын
Hey even for basic examples, posting a Github link to your working example would be 🔥. Thanks for the video.
@MelkeyDev
@MelkeyDev Жыл бұрын
Thanks for the idea!
@bumpy_lumps
@bumpy_lumps Жыл бұрын
WE LOVE GO
@manfrombritain6816
@manfrombritain6816 8 ай бұрын
what is the purpose of the anonymous func that tells the wg to wait, and to then close the channel? doesn't it work the same without the func?
@maryembenyounes523
@maryembenyounes523 4 ай бұрын
i guess so that it doesn't block the main function because we need to print the results as they enter the channel
@cyrilc189
@cyrilc189 4 ай бұрын
It seems to defeat the purpose of the wait group which is to ensure synchronization. Synchronizing in a separate go routine can produce unpredictable results.
@zoeyfryhover1816
@zoeyfryhover1816 4 ай бұрын
You stopped returning the data and just returned the names of the cities you passed in?
@DeviantFox
@DeviantFox 6 ай бұрын
can you limit how many resources you use instead of all or nothing?
@konradpiotrowski9549
@konradpiotrowski9549 6 ай бұрын
I am not sure if your example with reading the data from huge csv file using goroutines will make it any faster. At this point you are limited by your CPU power, if you create a few goroutines, CPU power will be split amongst them. It is nice to spawn a goroutine in order to not block completely your app, so you can read csv file in the background but sorry, unless you give me a code example I am not convinced about that
@MelkeyDev
@MelkeyDev 6 ай бұрын
It can set you up to parallelize the tasks if you have more than 1 CPU
@YerbolAssylhanov
@YerbolAssylhanov 8 ай бұрын
cool video)
@kubre
@kubre Жыл бұрын
Lets goooo
@kkebo
@kkebo Жыл бұрын
Is powing Melkey's version of brofist
@MelkeyDev
@MelkeyDev Жыл бұрын
yes - yes it
@lawniczakjohn
@lawniczakjohn Жыл бұрын
Sweet video my dude! Got a link to that tasty concurrency fire file?
@MelkeyDev
@MelkeyDev Жыл бұрын
Like the code it self?
@lawniczakjohn
@lawniczakjohn Жыл бұрын
Yes 😸
@derrique21
@derrique21 3 күн бұрын
Seeing 2 different terminal outputs for each implementation 6:31 NON go routine: This is the data {{292.9}} This is the data{{288.84}} … go routine: This is the Paris This is the London … Is this expected? Not seeing the data from get request..
@derrique21
@derrique21 3 күн бұрын
Ignore, I didn’t scroll down far enough. Looks like this was already mentioned
@Mr.Robots
@Mr.Robots 10 ай бұрын
Tks for the video! But the concurrency definition is not that.
@hebozhe
@hebozhe Жыл бұрын
You may want to capture common errors that don't get caught as errors, like leaving routines asleep, negative allocation, and deadlocks.
@joaodiasconde
@joaodiasconde Жыл бұрын
Go's concurrency is awesome, literally the main feature, makes up for some of the ugly sides of Go for sure. Liked the video, I would maybe just add a larger array of cities so the difference is more noticeable. Probably a multiple of the number of your logical cores, to see if it scaled down linearly.
@MelkeyDev
@MelkeyDev Жыл бұрын
I think we need a part two then no?
@joaodiasconde
@joaodiasconde Жыл бұрын
@@MelkeyDev Thinking? That was your first mistake just GO ♿♿♿
@BboyKeny
@BboyKeny Жыл бұрын
I prefer Rust's error handling over that of Go, although Go's error as value is better than throwing and catching exceptions imho. But nothing beats Go's concurrency (maybe in performance but not in syntax)
@joaodiasconde
@joaodiasconde Жыл бұрын
@@BboyKeny 100%, rust's error handling is the best out there
@nijatSh
@nijatSh 7 ай бұрын
I didn't see any effect of goroutines in this video😅
@TMANandMAISON991
@TMANandMAISON991 8 ай бұрын
Isn't that supposed to take 100ms after using goroutine?
@MelkeyDev
@MelkeyDev 8 ай бұрын
Hm, not sure what you mean!
@TMANandMAISON991
@TMANandMAISON991 4 ай бұрын
@@MelkeyDev if it takes ~400ms to complete 4 operations consecutively, then one request takes about ~100 ms so if we make 4 requests in parallel that should take ~100ms as well
@carolli5960
@carolli5960 2 ай бұрын
I think the data need to be sent to the chan and remove the return data in fetchWeather func. And it don't need the anonymous func
@maksimteplyy1404
@maksimteplyy1404 7 ай бұрын
Niceee
@aloufin
@aloufin Жыл бұрын
ok the glitch sound effect at 7;38 is waaay to loud holy shit scared me Haah
@yoloopen
@yoloopen Жыл бұрын
"Concurrency is executing tasks at the same time", "good example if it is to read a bunch of rows" - that's insane, it's so well covered topic, it takes 10 seconds to google and briefly check a sum up and pick up some example, why didn't you do it? you kinda want to teach other people, but you don't care enough to even google?
@solo-im1wl
@solo-im1wl Жыл бұрын
race conditions in the final run xd
@MelkeyDev
@MelkeyDev Жыл бұрын
what where
@lobokun
@lobokun Жыл бұрын
is there a place we can get the code?
@MelkeyDev
@MelkeyDev Жыл бұрын
I think I should add it to the description
@GameSmilexD
@GameSmilexD Жыл бұрын
go is going to build a lot of tech in the future, its the easiest language to integrate with an LLM u just need to understand a bit of architecture and debugging and its still fast, python with jit to asm/c is the current most used option and imo the best but cant deny the facts
@MelkeyDev
@MelkeyDev Жыл бұрын
100%
@aryamoghaddam529
@aryamoghaddam529 9 ай бұрын
Concurrency is handling multiple tasks at once, NOT executing them. You can have one CPU core execute tasks in consecutive order or which their queue up. Please learn first then make videos Thanks
@neneodonkor
@neneodonkor 7 ай бұрын
So handling multiple task AT ONCE IS WHAT?
@KevinLanguasco
@KevinLanguasco 7 ай бұрын
​@@neneodonkorParallelism
@viridianite
@viridianite 5 ай бұрын
To piggyback on this, with a single CPU tasks run concurrently in any modern OS. A task is run for a bit, another task for a bit, and so on and forth. The thing is the CPU scheduler switches between tasks fairly often and quickly, which gives the impression the tasks are executed at the same time. However at any given point in time only a single task is running on a given CPU. When it comes to parallelism, first tasks must be broken doen to run in a concurrent fashion and then you must have the hardware to run them, i.e., tasks running at exact the same time in different CPUs. Without hardware support, i.e., more CPUs, you cannot have parallelism. Since tasks must be able to run concurrently if you want them to run in parallel (assuming you've enough CPUs), we can say that parallelism is a subset of concurrency. Thus, all parallel tasks are concurrent but not all concurrent tasks are parallel. Any good OS book goes over this. I personally recommend Ramzi's OS: Three Easy Pieces. For a more practical book, I'm finding Cutajar's "Learn Concurrent Programming with Go" quite good.
@viridianite
@viridianite 5 ай бұрын
​@@neneodonkorHANDLING multiple tasks AT ONCE is concurrency, EXECUTING multiple tasks AT ONCE is parallelism. Handling means that instead of executing a task to completion on a CPU, followed by another task, etc., the CPU scheduler runs a task for slices of time and thus interleaving their execution time.
@sklarenbach
@sklarenbach 3 ай бұрын
Here are precise definitions of concurrency and parallelism in computer science: Concurrency: Concurrency refers to the ability of different parts or units of a program, algorithm, or system to be executed out-of-order or in partial order, without affecting the final outcome. It allows for multiple tasks to be in progress simultaneously, but not necessarily executing at the exact same time. Concurrent execution may involve interleaving the execution of multiple tasks on a single processor or core. Key points: - Tasks can start, run, and complete in overlapping time periods - Does not necessarily imply simultaneous execution - Focuses on dealing with multiple tasks at once Parallelism: Parallelism refers to the simultaneous execution of multiple tasks or processes at the same instant of time. It requires hardware with multiple processing units, such as multi-core processors or distributed systems. Parallel execution aims to divide a task into smaller subtasks that can be processed simultaneously, thus reducing the overall processing time. Key points: - Tasks are literally executed at the same time - Requires hardware support (multiple processors/cores) - Focuses on simultaneous execution to improve performance The main difference is that concurrency is about structure and dealing with multiple tasks, while parallelism is about execution and performing multiple tasks simultaneously.
@ricardochi6637
@ricardochi6637 Жыл бұрын
Hi, my unique doubt is how we print the data from the api? i see that only printing the city.
@Muhammed-nani964
@Muhammed-nani964 Жыл бұрын
You should really create a short intro hmmm when will you be live ? It’s already the weekend
@crusader_
@crusader_ Жыл бұрын
Please make a video about error handling. Address the `if err != nil` issue
@spyroninja
@spyroninja 7 ай бұрын
It's not an issue
@GusPm
@GusPm 6 ай бұрын
It’s a feature bro
@kirillb.9322
@kirillb.9322 4 ай бұрын
Don’t show him Event loop guys 😂
@kylestubblefield3404
@kylestubblefield3404 Жыл бұрын
I am desperate to get wifi working for the esp32 board so I can use tinygo for my micro controllers
@MelkeyDev
@MelkeyDev Жыл бұрын
I think
@emil_l889
@emil_l889 Жыл бұрын
MORE GO CONCURRENCY
@MelkeyDev
@MelkeyDev Жыл бұрын
ALL MORE WE WANT
@abdessalemmohellebi
@abdessalemmohellebi 8 ай бұрын
Nah i'd go🗿
@larrystone654
@larrystone654 11 ай бұрын
2:51 it’s how hot?!
@choleralul
@choleralul Жыл бұрын
Screw benchmarks, tell us ho much you benchPRESS!
@j.r.r.tolkien8724
@j.r.r.tolkien8724 Жыл бұрын
Congratulations! This is the worst explanation I've seen so far and I've seen a lot.
@trash_dev
@trash_dev Жыл бұрын
i dont like go
@MelkeyDev
@MelkeyDev Жыл бұрын
but you like me
@RobertMartin-z3z
@RobertMartin-z3z Ай бұрын
Kuvalis Alley
@Endurancecoach00
@Endurancecoach00 Жыл бұрын
Concurrenthy
@thewhiteoaktree
@thewhiteoaktree Жыл бұрын
Bro I just did a fat line of PHP
@MelkeyDev
@MelkeyDev Жыл бұрын
we need to get you help
@ramessu7976
@ramessu7976 Ай бұрын
Not for high trading
@abdallahelhdad819
@abdallahelhdad819 Жыл бұрын
tbh i understand nothing.. i played with c++ modern and js stuff but still understands 0. looks like good content, but not for me
@WarrenBuffering-kj7us
@WarrenBuffering-kj7us Жыл бұрын
I genuinely don't understand this meme
@hansmuster5291
@hansmuster5291 9 ай бұрын
please put in some more effort next time... it does not even print the temperatures in the end 🙄
@emil_l889
@emil_l889 Жыл бұрын
GOCURRENCY
@MelkeyDev
@MelkeyDev Жыл бұрын
Call that Gorrency
Goroutines Crash Course (Mutex, Channels, Wait Group, & More!)
15:42
Concurrency in Go
18:40
Jake Wright
Рет қаралды 619 М.
ПРЯМОЙ ЭФИР. Золотой мяч France Football 2024
4:41:06
Smart Sigma Kid #funny #sigma
00:14
CRAZY GREAPA
Рет қаралды 92 МЛН
ROSÉ & Bruno Mars - APT. (Official Music Video)
02:54
ROSÉ
Рет қаралды 245 МЛН
MY HEIGHT vs MrBEAST CREW 🙈📏
00:22
Celine Dept
Рет қаралды 102 МЛН
This is the BEST Golang Context Package Tutorial
12:18
Melkey
Рет қаралды 12 М.
The TRUTH About Golang Backend Frameworks
6:31
Melkey
Рет қаралды 126 М.
Introduction to Concurrency (Concurrency in Go #1)
27:54
Steve Hook
Рет қаралды 31 М.
This Is The BEST Way To Structure Your GO Projects
11:08
Melkey
Рет қаралды 79 М.
This is why Go Channels are awesome
6:06
Web Dev Cody
Рет қаралды 14 М.
Как на самом деле устроены каналы в Golang? | Golang channels internals
41:31
Advanced Golang: Channels, Context and Interfaces Explained
22:17
Code With Ryan
Рет қаралды 123 М.
Concurrency is not Parallelism by Rob Pike
31:23
gnbitcom
Рет қаралды 136 М.
Go Routine Internals without breaking your brain
8:42
Core Dump
Рет қаралды 5 М.
ПРЯМОЙ ЭФИР. Золотой мяч France Football 2024
4:41:06