Go Concurrency Explained: Go Routines & Channels

Поділитися
Вставка
  • Опубліковано 23 сер 2023
  • 🚀Goroutines: We'll start by demystifying the power of goroutines. Learn how to create lightweight concurrent threads of execution, allowing your programs to handle multiple tasks simultaneously.
    🚀Channels: Discover the magic of channels, Go's built-in communication mechanism for safely passing data between goroutines. We'll explore both buffered and unbuffered channels and understand when to use each.
    🚀Concurrency Patterns: Explore essential concurrency patterns, including fan-out/fan-in, worker pools, and more. These patterns will supercharge your code's efficiency while maintaining clarity and readability.
    Real API Integration: The real-world application of concurrency is where the magic happens. Watch as we integrate real API calls using goroutines and channels, fetching data faster than ever before.
    Twitch
    I stream live on Twitch every weekend
    Twitch : / melkey
    Join the amazing community on Discord
    Discord: / discord
    I post memes and host Twitter Tech Spaces
    Twitter: / melkeydev
    SUBSCRIBE OR GET LAID OFF
    ╔═╦╗╔╦╗╔═╦═╦╦╦╦╗╔═╗
    ║╚╣║║║╚╣╚╣╔╣╔╣║╚╣═╣
    ╠╗║╚╝║║╠╗║╚╣║║║║║═╣
    ╚═╩══╩═╩═╩═╩╝╚╩═╩═╝
    #coding #neovim #typescript #programming #vim #softwareengineering #codinglife #webdesign #webdevelopment #webdev #javascript #rustlang #rust #twitch #twitchstreamer #programmerhumor #codinghumor #software #softwareengineer #softwaredeveloper #softwaredevelopment #gymbro #gym #programmerhumor #programming #coding
  • Наука та технологія

КОМЕНТАРІ • 127

  • @MelkeyDev
    @MelkeyDev  11 місяців тому +21

    I hope you all enjoyed this GO LANG video!
    Your comments mean the world to me. We are SO CLOSE to 5k subs!

  • @VikingPingvin93
    @VikingPingvin93 10 місяців тому +34

    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.

  • @ohLyln
    @ohLyln 11 місяців тому +16

    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  11 місяців тому +2

      Thanks for the info!

    • @guhkunpatata3150
      @guhkunpatata3150 8 місяців тому +1

      great insight. is it safe to assume that it is an issue ? if yes, is there any way to overcome this issue?

    • @ohLyln
      @ohLyln 8 місяців тому

      @@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.

  • @Nintron
    @Nintron 10 місяців тому +24

    2:06 I'm so used to Prime screaming TOKKKIIOOOOO I half expected Melkey to do that here...

  • @headlights-go-up
    @headlights-go-up 11 місяців тому +20

    I seriously love and value these videos about Go's main features.

    • @MelkeyDev
      @MelkeyDev  11 місяців тому +1

      I should do more then??

    • @kkebo
      @kkebo 11 місяців тому

      @@MelkeyDev Definitely please! Really useful for someone who is currently learning Go like me

    • @headlights-go-up
      @headlights-go-up 11 місяців тому

      @@MelkeyDev yes please, mi lord

  • @ed223-p5g
    @ed223-p5g 11 місяців тому +3

    why do you execute the wg.Wait and the channel close in a goroutine?

  • @hanzofuma
    @hanzofuma 11 місяців тому +8

    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  11 місяців тому +1

      Hell yeah my pleasure

  • @ethaaan467
    @ethaaan467 5 місяців тому

    simple and on point. great videos bro!

  • @jyuart
    @jyuart 7 місяців тому +2

    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  7 місяців тому

      The only way to communicate between GO routines is through channels

  • @BbB-vr9uh
    @BbB-vr9uh 4 місяці тому +1

    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  4 місяці тому

      Hopefully this was helpful!

  • @3MILFOR3VER
    @3MILFOR3VER 10 місяців тому +1

    very quickly and simply explained Goroutines, appreciate it!

    • @MelkeyDev
      @MelkeyDev  10 місяців тому

      Glad it was helpful!

  • @laureal1699
    @laureal1699 4 місяці тому +1

    where can I review the full code bro?

  • @fliplucky8813
    @fliplucky8813 11 місяців тому +4

    - saw this video
    - was working
    ....
    Alright, time for a break and watch MelkyDev

    • @MelkeyDev
      @MelkeyDev  11 місяців тому

      Its melkey time baybay

  • @yooos3
    @yooos3 2 місяці тому

    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!

  • @axMf3qTI
    @axMf3qTI 5 місяців тому +2

    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 4 місяці тому

      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 2 місяці тому

      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

  • @user-nl3uu9cx3x
    @user-nl3uu9cx3x 2 місяці тому

    Thank you!!!

  • @DeviantFox
    @DeviantFox 2 місяці тому

    can you limit how many resources you use instead of all or nothing?

  • @codelinx
    @codelinx 9 місяців тому

    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.

  • @peterjurak6738
    @peterjurak6738 2 місяці тому

    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.

  • @dwdtalks
    @dwdtalks 7 місяців тому

    Amazing

  • @erkropka
    @erkropka 9 місяців тому +3

    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 Місяць тому

      Most important thing the return data in weather function was useless.

  • @manfrombritain6816
    @manfrombritain6816 5 місяців тому +1

    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 Місяць тому

      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 Місяць тому

      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.

  • @_thisisnotjohn
    @_thisisnotjohn 11 місяців тому

    Gj 👏👏 What about making a tutorial where you build a simple cli tool in GO?

  • @SniboyPL
    @SniboyPL 10 місяців тому +4

    "concept of executing multiple tasks simultaenously by utilizing all available resources more effectively" - isn't this parallelization and not concurrency?

  • @vaster1142
    @vaster1142 8 місяців тому

    I'm subscribing.

  • @ameerhamza4816
    @ameerhamza4816 4 місяці тому

    entertaining and informative thanks

    • @MelkeyDev
      @MelkeyDev  4 місяці тому

      Glad you enjoyed it

  • @shoxruhxonismoilov-nw8zb
    @shoxruhxonismoilov-nw8zb 4 місяці тому

    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 !

  • @AsToNlele
    @AsToNlele 11 місяців тому +3

    My favourite part was when Go said it's Going time and went way too fast
    Great video

    • @MelkeyDev
      @MelkeyDev  11 місяців тому +1

      Glad you liked it!

  • @konradpiotrowski9549
    @konradpiotrowski9549 2 місяці тому

    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  2 місяці тому

      It can set you up to parallelize the tasks if you have more than 1 CPU

  • @user-fg1hq9jk8j
    @user-fg1hq9jk8j 4 місяці тому

    cool video)

  • @kylestubblefield3404
    @kylestubblefield3404 11 місяців тому

    I am desperate to get wifi working for the esp32 board so I can use tinygo for my micro controllers

  • @emil_l889
    @emil_l889 11 місяців тому +3

    WE WANT MORE

  • @zeroxthree
    @zeroxthree 8 місяців тому +2

    7:37, dude i scared me

  • @bumpy_lumps
    @bumpy_lumps 11 місяців тому +1

    WE LOVE GO

  • @hardikvegad3508
    @hardikvegad3508 3 місяці тому

    why dont u make a course on go, it will be lot helpful. Thanks!

  • @maksimteplyy1404
    @maksimteplyy1404 4 місяці тому

    Niceee

  • @crusader_
    @crusader_ 11 місяців тому

    Please make a video about error handling. Address the `if err != nil` issue

    • @spyroninja
      @spyroninja 4 місяці тому +1

      It's not an issue

    • @GusPm
      @GusPm 3 місяці тому

      It’s a feature bro

  • @hebozhe
    @hebozhe 9 місяців тому +1

    You may want to capture common errors that don't get caught as errors, like leaving routines asleep, negative allocation, and deadlocks.

  • @SanFranciscoCyclist
    @SanFranciscoCyclist 8 місяців тому

    Hey even for basic examples, posting a Github link to your working example would be 🔥. Thanks for the video.

    • @MelkeyDev
      @MelkeyDev  8 місяців тому

      Thanks for the idea!

  • @lobokun
    @lobokun 11 місяців тому +1

    is there a place we can get the code?

    • @MelkeyDev
      @MelkeyDev  11 місяців тому +1

      I think I should add it to the description

  • @aloufin
    @aloufin 11 місяців тому +1

    ok the glitch sound effect at 7;38 is waaay to loud holy shit scared me Haah

  • @ricardochi6637
    @ricardochi6637 9 місяців тому

    Hi, my unique doubt is how we print the data from the api? i see that only printing the city.

  • @kubre
    @kubre 11 місяців тому +1

    Lets goooo

  • @dixon2233
    @dixon2233 5 місяців тому

    He's not wrong when he started off off with "We all like go" lmao

  • @astrocanyounaut
    @astrocanyounaut 11 місяців тому +1

    god dang- mans is fr making me wanna switch to go from rust 😖 awesome vid!!! 2x a week bayBEE 🔥

    • @MelkeyDev
      @MelkeyDev  11 місяців тому +1

      Bruh RUST is SO old

  • @mamg301988
    @mamg301988 9 місяців тому

    great video, and What keyboard do you have?

    • @MelkeyDev
      @MelkeyDev  8 місяців тому

      I use the Moonlander

  • @lawniczakjohn
    @lawniczakjohn 11 місяців тому +1

    Sweet video my dude! Got a link to that tasty concurrency fire file?

  • @TMANandMAISON991
    @TMANandMAISON991 5 місяців тому +1

    Isn't that supposed to take 100ms after using goroutine?

    • @MelkeyDev
      @MelkeyDev  5 місяців тому

      Hm, not sure what you mean!

    • @TMANandMAISON991
      @TMANandMAISON991 22 дні тому

      @@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

  • @solo-im1wl
    @solo-im1wl 9 місяців тому +1

    race conditions in the final run xd

  • @zoeyfryhover1816
    @zoeyfryhover1816 29 днів тому

    You stopped returning the data and just returned the names of the cities you passed in?

  • @nijatSh
    @nijatSh 3 місяці тому +1

    I didn't see any effect of goroutines in this video😅

  • @joaodiasconde
    @joaodiasconde 11 місяців тому +2

    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  11 місяців тому +4

      I think we need a part two then no?

    • @joaodiasconde
      @joaodiasconde 11 місяців тому

      @@MelkeyDev Thinking? That was your first mistake just GO ♿♿♿

    • @BboyKeny
      @BboyKeny 10 місяців тому +1

      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 10 місяців тому

      @@BboyKeny 100%, rust's error handling is the best out there

  • @GameSmilexD
    @GameSmilexD 11 місяців тому

    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

  • @kkebo
    @kkebo 11 місяців тому +1

    Is powing Melkey's version of brofist

  • @Muhammed-nani964
    @Muhammed-nani964 11 місяців тому

    You should really create a short intro hmmm when will you be live ? It’s already the weekend

  • @Mr.Robots
    @Mr.Robots 6 місяців тому

    Tks for the video! But the concurrency definition is not that.

  • @kirillb.9322
    @kirillb.9322 Місяць тому

    Don’t show him Event loop guys 😂

  • @abdessalemmohellebi
    @abdessalemmohellebi 4 місяці тому +1

    Nah i'd go🗿

  • @emil_l889
    @emil_l889 11 місяців тому

    MORE GO CONCURRENCY

    • @MelkeyDev
      @MelkeyDev  11 місяців тому

      ALL MORE WE WANT

  • @larrystone654
    @larrystone654 8 місяців тому +1

    2:51 it’s how hot?!

  • @caballerosalas
    @caballerosalas 5 місяців тому

    The video starts at 1:28

  • @thewhiteoaktree
    @thewhiteoaktree 11 місяців тому

    Bro I just did a fat line of PHP

    • @MelkeyDev
      @MelkeyDev  11 місяців тому

      we need to get you help

  • @johnjohnes698
    @johnjohnes698 5 місяців тому +4

    it would be nice if you brought a bit less of drama, you are overplaying

    • @MelkeyDev
      @MelkeyDev  5 місяців тому

      Did you put this in the correct video?

  • @choleralul
    @choleralul 11 місяців тому

    Screw benchmarks, tell us ho much you benchPRESS!

  • @Endurancecoach00
    @Endurancecoach00 11 місяців тому +1

    Concurrenthy

  • @yoloopen
    @yoloopen 9 місяців тому +5

    "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?

  • @trash_dev
    @trash_dev 11 місяців тому +2

    i dont like go

    • @MelkeyDev
      @MelkeyDev  11 місяців тому

      but you like me

  • @abdallahelhdad819
    @abdallahelhdad819 9 місяців тому

    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 11 місяців тому

    I genuinely don't understand this meme

  • @aryamoghaddam529
    @aryamoghaddam529 6 місяців тому +32

    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 4 місяці тому +4

      So handling multiple task AT ONCE IS WHAT?

    • @KevinLanguasco
      @KevinLanguasco 4 місяці тому +3

      ​@@neneodonkorParallelism

    • @viridianite
      @viridianite 2 місяці тому

      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 2 місяці тому +2

      ​@@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 task for slices of time and thus interleaving their execution time.

  • @j.r.r.tolkien8724
    @j.r.r.tolkien8724 8 місяців тому +2

    Congratulations! This is the worst explanation I've seen so far and I've seen a lot.

  • @hansmuster5291
    @hansmuster5291 5 місяців тому

    please put in some more effort next time... it does not even print the temperatures in the end 🙄

  • @emil_l889
    @emil_l889 11 місяців тому +2

    GOCURRENCY

    • @MelkeyDev
      @MelkeyDev  11 місяців тому +1

      Call that Gorrency