Rust

Tokio & Async I/O

Tokio runtime, async tasks, select!, join!, timeout, tokio::spawn, async I/O ไฟล์/เครือข่าย

22 คำถามสัมภาษณ์·
Senior
1

บทบาทหลักของ runtime Tokio ในแอปพลิเคชัน Rust แบบ asynchronous คืออะไร?

คำตอบ

Runtime Tokio มี executor ที่ทำการ poll futures จนกว่าจะเสร็จสมบูรณ์ นอกจากนี้ยังจัดการ scheduler แบบ multi-thread (โดยค่าเริ่มต้น) เพื่อกระจาย task ไปยังหลาย OS thread รวมถึง reactor สำหรับการดำเนินการ I/O แบบ asynchronous หากไม่มี runtime futures ของ Rust จะไม่ทำอะไรเลยเพราะเป็น lazy โดยค่าเริ่มต้น

2

จะเริ่มต้น runtime Tokio ด้วย macro #[tokio::main] ได้อย่างไร?

คำตอบ

Macro #[tokio::main] แปลงฟังก์ชัน async main() ให้เป็นจุดเริ่มต้นแบบ synchronous ที่สร้าง runtime Tokio แบบ multi-thread และเรียกใช้ฟังก์ชัน async มาโครนี้สร้าง boilerplate ที่จำเป็นสำหรับการสร้าง runtime และ block จนกว่า future หลักจะเสร็จสมบูรณ์โดยอัตโนมัติ

3

ความแตกต่างระหว่าง #[tokio::main] และ #[tokio::main(flavor = "current_thread")] คืออะไร?

คำตอบ

โดยค่าเริ่มต้น #[tokio::main] จะสร้าง runtime แบบ multi-thread ที่กระจาย task ไปยัง pool ของ worker thread เมื่อใช้ flavor = "current_thread" runtime จะรัน task ทั้งหมดบน thread หลักเท่านั้น ซึ่งมีประโยชน์สำหรับการทดสอบ แอปพลิเคชันที่เรียบง่าย หรือเมื่อต้องหลีกเลี่ยงการแชร์ข้อมูลระหว่าง thread

4

tokio::spawn() ทำอะไรและคืนค่าเป็นชนิดข้อมูลใด?

5

ทำไม future ที่ส่งเข้า tokio::spawn() จึงต้องเป็น 'static?

+19 คำถามสัมภาษณ์

เชี่ยวชาญ Rust สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี