đ§ Go vs Rust (Tokio): Stack, Magic Bag, āĻāĻŦāĻ Concurrency Battle

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
.awaitpoint āĻā§āϞ⧠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) |
| Stack | 2KB growable heap-based | Stackless, compiler-generated state machine |
| Function Calls | Stack frame | .await-based state transition |
| Recursion | Safe, auto-grow | Stack overflow āĻšāϤ⧠āĻĒāĻžāϰ⧠|
| Task spawning | go f() | tokio::spawn(async { ... }) |
| Concurrency Model | Preemptive (runtime schedules) | Cooperative (.await āĻĻāĻŋā§ā§ yield āĻāϰā§) |
| Performance | āĻ āύā§āĻ āĻāĻžāϞ⧠| āĻŦā§āĻļāĻŋ āĻāĻžāϞ⧠(zero-cost abstraction) |
| Memory Management | Garbage Collected | Manual & 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āĨ¤
āĻāĻĒāύāĻŋ āĻā§āύāĻāĻž āĻĒāĻāύā§āĻĻ āĻāϰāĻŦā§āύ?




