• wim@lemmy.sdf.org
    link
    fedilink
    arrow-up
    5
    ·
    1 year ago

    That’s a whole different thing to me. That’s not async, that’s channels and multithreading.

    I do that in Rust as well with mcsp channels and it’s been fine.

    It’s the async/await bit that I find incredibly akward all the time.

    • sugar_in_your_tea@sh.itjust.works
      link
      fedilink
      arrow-up
      3
      ·
      1 year ago

      Channels and multithreading are a solution to async problems. Instead of a keyword trying to abstract away the async, you use a mechanism for communicating between coroutines. You can run Go with a single execution thread and still get benefits from goroutines and channels. In fact, Go didn’t turn on multithreading until 1.5.

      Go solves async with goroutines and channels, not with an async keyword. The runtime is pretty heavy and steps in when standard library functions would block. In other words, it’s async by default since blocking IO causes another goroutines to execute.