Skip to main content

Command Palette

Search for a command to run...

🧠 Go vs Rust (Tokio): Stack, Magic Bag, āĻāĻŦāĻ‚ Concurrency Battle

Published
â€ĸ3 min read
🧠 Go vs Rust (Tokio): Stack, Magic Bag, āĻāĻŦāĻ‚ Concurrency Battle
M

A self-motivated and enthusiastic web developer with a deep interest in JavaScript (React.js). To work in the Software industry with modern web technologies of different local & multinational Software/ IT agencies of Bangladesh and grow rapidly with increasing responsibilities.

Concurrency āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜ āĻ•āϰāϛ⧇āύ? Go-āĻāϰ “Magic Bag” āφāϰ Rust-āĻāϰ “State Machine” stackless async model āϕ⧇āĻŽāύ? āφāϜ āφāĻŽāϰāĻž āϜāĻžāύāĻŦā§‹ āĻĻ⧁āχāϟāĻŋ āĻ­āĻžāώāĻžāϰ āĻŽāĻ§ā§āϝāĻ•āĻžāϰ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ, āωāĻĻāĻžāĻšāϰāĻŖ āϏāĻšāĨ¤

🎒 āĻāĻ•āϟāĻž āĻŦāĻ‡ā§Ÿā§‡āϰ āĻŦā§āϝāĻžāĻ— āĻāϰ āωāϧāĻžāĻšāϰāύ āĻĻāĻŋā§Ÿā§‡ āĻļ⧁āϰ⧁ āĻ•āϰāĻŋ

āϧāϰ⧁āύ āφāĻĒāύāĻŋ āĻāĻ•āϜāύ āĻ›āĻžāĻ¤ā§āϰāĨ¤ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻ•ā§āϞāĻžāϏ⧇ āϝāĻžāĻ“ā§ŸāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻž āĻŦāĻ‡ā§Ÿā§‡āϰ āĻŦā§āϝāĻžāĻ— (backpack) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύāĨ¤ āφāĻĒāύāĻŋ āĻŦāχ āϗ⧁āĻ›āĻŋā§Ÿā§‡ āϰāĻžāϖ⧇āύ — āύāϤ⧁āύ āĻŦāχ āωāĻĒāϰ⧇, āĻĒ⧁āϰāĻžāύ⧋ āĻŦāχ āύāĻŋāĻšā§‡āĨ¤
āĻāχ āϧāĻžāϰāĻŖāĻžāϟāĻŋāχ āĻšāĻšā§āϛ⧇ stack (LIFO – Last In First Out)āĨ¤


🐹 Go: āĻŽā§āϝāĻžāϜāĻŋāĻ• āĻŦā§āϝāĻžāϗ⧇āϰ āĻŽāĻžāϞāĻŋāĻ•

Traditional stack (C/C++ style):

  • āĻĢāĻŋāĻ•ā§āϏāĻĄ āϏāĻžāχāϜ (ā§§MB stack)

  • āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ function call → stack overflow

  • āĻŦ⧜ recursive function → āĻŦā§āϝāĻžāĻ— āĻĢ⧇āĻŸā§‡ āϝāĻžā§Ÿ! đŸ˜Ŧ

Go āϕ⧀ āĻ•āϰ⧇?

Go āĻŦāϞ⧇:
"āφāĻŽāĻŋ āĻĻāĻŋāĻŦā§‹ āĻŽā§āϝāĻžāϜāĻŋāĻ• āĻŦā§āϝāĻžāĻ—!"

  • āĻĒā§āϰāϤāĻŋāϟāĻŋ goroutine āĻĒāĻžā§Ÿ āĻŽāĻžāĻ¤ā§āϰ 2KB stack

  • āĻĻāϰāĻ•āĻžāϰ āĻšāϞ⧇ Go āύāĻŋāĻœā§‡āχ āϏ⧇āχ āĻŦā§āϝāĻžāĻ—āϕ⧇ heap āĻ āĻŦ⧜ āĻ•āϰ⧇ āĻĢ⧇āϞ⧇

  • āĻĒ⧁āϰāĻžāύ⧋ data āύāϤ⧁āύ āĻŦā§āϝāĻžāϗ⧇ āĻ•āĻĒāĻŋ āĻ•āϰ⧇, āφāĻĒāύāĻŋ āĻ•āĻŋāϛ⧁ āĻŦ⧁āĻāϤ⧇āχ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž āĨ¤ āĻœā§‹āϏ āύāĻž āĻŦā§āϝāĻžāĻĒāĻžāϰ āϟāĻž āĨ¤āωāĻĻāĻžāĻšāϰāĻŖ:

      func check() {
          var x int
          fmt.Printf("Address: %p\n", &x)
      }
    

    📌 āωāĻĒā§œā§‡āϰ āϕ⧋āĻĄ āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ call āĻ•āϰāϞ⧇ address āĻŦāĻĻāϞāĻžā§Ÿ → stack frame āύāϤ⧁āύ āĻšāĻšā§āϛ⧇
    📌 Deep recursion āĻĻāĻŋāϞ⧇ address āĻ…āύ⧇āĻ• āĻĻā§‚āϰ⧇ āϚāϞ⧇ āϝāĻžāĻŦ⧇ → āĻŦ⧜ āĻŦā§āϝāĻžāĻ— allocate āĻšā§Ÿā§‡āϛ⧇!

āĻāĻŦāĻžāϰ āφāϏāĻŋ Rust āĻāϰ āĻŦ⧇āϞāĻžā§Ÿ āĻ•āĻŋ āĻšā§Ÿ āĨ¤

đŸĻ€ Rust (Tokio): Stack āύ⧇āχ, āφāϛ⧇ State Machine!

Rust async/await āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ concurrency āĻ•āϰāϤ⧇ āĻšāϞ⧇ āĨ¤
Tokio āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻĒāĻžāχ lightweight async tasks — āĻ•āĻŋāĻ¨ā§āϤ⧁ stack āĻ•āχ?

Stackless Model:

  • async function → compiler-generated state machine

  • .await point āϗ⧁āϞ⧋ checkpoint āĻšāĻŋāϏāĻžāĻŦ⧇ struct-āĻ āϰ⧂āĻĒ āĻ¨ā§‡ā§Ÿ

  • function āĻāϰ āϕ⧋āύ⧋ traditional call stack āĻĨāĻžāϕ⧇ āύāĻž

āωāĻĻāĻžāĻšāϰāĻŖ:

async fn fetch_data() {
    let res = reqwest::get("https://api.example.com").await.unwrap();
    println!("Data: {:?}", res);
}

âžĄī¸ āĻāϟāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻšā§Ÿā§‡ āĻšā§Ÿā§‡ āϝāĻžā§Ÿ āĻāĻŽāύ āĻ•āĻŋāϛ⧁:

enum FetchDataState {
    Start,
    Waiting,
    Done,
}

🔍 āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ poll āĻšāϞ⧇ state change āĻšā§Ÿ, āϕ⧋āύ⧋ stack frame āĻšā§Ÿ āύāĻž!


📋 āϤ⧁āϞāύāĻž: Go āĻŦāύāĻžāĻŽ Rust (Tokio)

āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝGo (Goroutine)Rust (Tokio async)
Stack2KB growable heap-basedStackless, compiler-generated state machine
Function CallsStack frame.await-based state transition
RecursionSafe, auto-growStack overflow āĻšāϤ⧇ āĻĒāĻžāϰ⧇
Task spawninggo f()tokio::spawn(async { ... })
Concurrency ModelPreemptive (runtime schedules)Cooperative (.await āĻĻāĻŋā§Ÿā§‡ yield āĻ•āϰ⧇)
PerformanceāĻ…āύ⧇āĻ• āĻ­āĻžāϞ⧋āĻŦ⧇āĻļāĻŋ āĻ­āĻžāϞ⧋ (zero-cost abstraction)
Memory ManagementGarbage CollectedManual & Safe via ownership

đŸ§Ē āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇ āĻĻ⧇āϖ⧁āύ (Tokio)

#[tokio::main]
async fn main() {
    for i in 0..10000 {
        tokio::spawn(async move {
            println!("Running task {}", i);
        });
    }
}

âžĄī¸ ā§§ā§Ļ āĻšāĻžāϜāĻžāϰ task ā§§ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āχ! 😲
Tokio āĻāϤ lightweight āϝ⧇ āĻŦ⧜ āϞ⧋āĻĄā§‡āĻ“ āĻ—āϤāĻŋ āĻ•āĻŽā§‡ āύāĻžāĨ¤


✅ āϕ⧇ āĻ•āĻžāϕ⧇ āĻšāĻžāϰāĻžāϞ⧋?

  • Go āĻāϰ āĻŽā§āϝāĻžāϜāĻŋāĻ• āĻŦā§āϝāĻžāĻ— stack grow āĻ•āϰ⧇ āĻŦāϞ⧇ recursion-friendly

  • Rust āĻāϰ async model āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ efficient, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϞāĻŋāĻ–āϤ⧇ āĻ•āĻ āĻŋāύ

  • Go āφāĻĒāύāĻžāϕ⧇ āĻĻāĻŋā§Ÿā§‡ āĻĻā§‡ā§Ÿ managed runtime, āφāϰ Rust āĻĻā§‡ā§Ÿ full control


📌 āĻļ⧇āώ āĻ•āĻĨāĻž

Go āĻāĻŦāĻ‚ Rust āωāϭ⧟āχ concurrency āϜāĻ—āϤ⧇ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ — āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒāĻĻā§āϧāϤāĻŋ āĻ­āĻŋāĻ¨ā§āύāĨ¤
Go āφāĻĒāύāĻžāϕ⧇ āĻĻā§‡ā§Ÿ āĻāĻ•āϟāĻŋ flexible runtime, āϝ⧇āĻ–āĻžāύ⧇ stack āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇āχ āĻŦ⧜ āĻšā§ŸāĨ¤
Rust āφāĻĒāύāĻžāϕ⧇ āĻĻā§‡ā§Ÿ āĻāĻ•āϟāĻŋ compiler-controlled, memory-safe model, āϝ⧇āĻ–āĻžāύ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻšā§Ÿ āĻŦ⧁āĻā§‡-āĻļ⧁āύ⧇ — āĻ•āĻŋāĻ¨ā§āϤ⧁ performance unmatchedāĨ¤

āφāĻĒāύāĻŋ āϕ⧋āύāϟāĻž āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻŦ⧇āύ?

I
Imran Hasan10mo ago

awesome

More from this blog

DSA āĻŽāĻžāύ⧇ āĻļ⧁āϧ⧁ LeetCode āύāĻž — DSA āĻŽāĻžāύ⧇ Production System slow āύāĻž āĻ•āϰāĻž

āĻ…āύ⧇āϕ⧇āχ āĻŦāϞ⧇ — “āĻ­āĻžāχ, Web Development-āĻ DSA āϞāĻžāϗ⧇ āύāĻžâ€ āφāϏāϞ⧇ Junior Developer āĻĨāĻžāĻ•āϞ⧇ āĻāĻŽāύāϟāĻžāχ āĻŽāύ⧇ āĻšāϝāĻŧāĨ¤āφāĻŽāĻŋ āύāĻŋāĻœā§‡āĻ“ Junior āĻĨāĻžāĻ•āϤ⧇ āϤāĻžāχ āĻ­āĻžāĻŦāϤāĻžāĻŽāĨ¤ āφāĻŽāĻžāϰ āφāĻŦāĻžāϰ āĻāĻ•āϟāĻž āĻŦāĻžāĻœā§‡ āĻ¸ā§āĻŦāĻ­āĻžāĻŦ āφāϛ⧇ 😅👉 āϕ⧋āύ āĻ•āĻŋāϛ⧁āϰ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύāĻž āĻŦ⧁āĻāϞ⧇ āϏ⧇āϟāĻž āφāĻŽāĻžāϰ āĻŽāĻžāĻĨāĻžāϝāĻŧ āĻĸ⧁āϕ⧇ āύāĻžāĨ¤ Junior āĻĨāĻžāĻ•āϤ⧇ DSA āĻļāĻŋāϖ⧇āĻ›āĻŋ...

Dec 24, 20253 min read
DSA āĻŽāĻžāύ⧇ āĻļ⧁āϧ⧁ LeetCode āύāĻž — DSA āĻŽāĻžāύ⧇ Production System slow āύāĻž āĻ•āϰāĻž

đŸĻ€ Rust-āĻ āĻŽā§‡āĻŽāϰāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ: GC āĻ›āĻžā§œāĻž In-depth.

Rust-āĻ Garbage Collector (GC) āύ⧇āχ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŽā§‡āĻŽāϰāĻŋ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž (memory safety) āφāϰ performance Rust-āĻāϰ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻĻāĻŋāĻ•āĨ¤āϤāĻžāχ, Go-āĻāϰ āĻŽāϤ⧋ runtime-based GC āύāĻž āĻĨāĻžāĻ•āĻž āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“ Rust compile-time āĻ āĻŽā§‡āĻŽāϰāĻŋ āĻŽā§āϝāĻžāύ⧇āϜ āĻ•āϰ⧇ Ownership System, Borrow Checker, āφāϰ Lifetime...

Oct 5, 202523 min read
đŸĻ€ Rust-āĻ āĻŽā§‡āĻŽāϰāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ: GC āĻ›āĻžā§œāĻž In-depth.

Morshedul Munna

45 posts

As a Software Developer, I am like an architect who designs and builds digital Products. I use my knowledge and expertise to create modern applications that are both efficient and elegant.