
Concurrency Basics
Threads, thread::spawn, move closures, channels (mpsc), trait Send & Sync, thread safety
1ควรใช้ฟังก์ชันใดในการสร้าง thread ใหม่ใน Rust?
ควรใช้ฟังก์ชันใดในการสร้าง thread ใหม่ใน Rust?
คำตอบ
ฟังก์ชัน thread::spawn จากโมดูล std::thread จะสร้าง thread การทำงานใหม่ โดยรับ closure เป็นพารามิเตอร์และคืนค่า JoinHandle ที่ช่วยให้รอ thread ทำงานเสร็จด้วยเมธอด join() ได้ ฟังก์ชันนี้เป็นจุดเริ่มต้นหลักสำหรับการเขียนโปรแกรมแบบ concurrent ที่อิงกับ thread ใน Rust
2เมธอด join() ที่เรียกบน JoinHandle คืนค่าอะไร?
เมธอด join() ที่เรียกบน JoinHandle คืนค่าอะไร?
คำตอบ
เมธอด join() คืนค่า Result<T, E> โดยที่ T คือชนิดข้อมูลที่ closure ของ thread คืนค่า ถ้า thread ทำงานเสร็จตามปกติ จะได้ Ok(ค่า) ถ้า thread เกิด panic จะได้ Err ที่มีข้อมูลของ panic วิธีนี้ช่วยให้ดึงผลลัพธ์ของ thread หรือจัดการข้อผิดพลาดได้อย่างปลอดภัย
3ทำไมต้องใช้คีย์เวิร์ด move กับ closure ที่ส่งให้ thread::spawn?
ทำไมต้องใช้คีย์เวิร์ด move กับ closure ที่ส่งให้ thread::spawn?
คำตอบ
คีย์เวิร์ด move บังคับให้ closure รับ ownership ของตัวแปรที่จับมาแทนการยืม สิ่งนี้จำเป็นกับ thread::spawn เพราะ thread ใหม่อาจมีอายุยืนกว่า scope ที่ประกาศตัวแปร หากไม่มี move คอมไพเลอร์จะปฏิเสธเพราะไม่สามารถรับประกันได้ว่า reference จะยังคงใช้งานได้ตลอดอายุของ thread
trait Send ใน Rust มีบทบาทอะไร?
trait Sync ใน Rust มีบทบาทอะไร?
+17 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ Rust อื่นๆ
พื้นฐาน Rust
Ownership & Borrowing
Structs & Enums
การจัดการข้อผิดพลาด
คอลเลกชัน
โมดูลและแพ็กเกจ
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
async/await
Testing
Cargo & Ecosystem
Pattern Matching
มาโคร
Serde และการ Serialization
Unsafe Rust
Trait ขั้นสูง
Lifetime ขั้นสูง
Type System
Tokio & Async I/O
การเพิ่มประสิทธิภาพ
Memory Management
Web Frameworks
Database Integration
Design Pattern ของ Rust
เชี่ยวชาญ Rust สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี