1
ดีเซลควรถูกเรียกใช้โดยใช้ซิงค์นักแสดง, actix_web :: web :: block หรือ futures-cpupool?
พื้นหลัง ฉันกำลังทำงานกับแอปพลิเคชัน actix-web โดยใช้ดีเซลผ่าน r2d2 และไม่แน่ใจว่าจะสร้างข้อความค้นหาแบบอะซิงโครนัสได้ดีที่สุดได้อย่างไร ฉันพบตัวเลือกสามตัวที่ดูเหมือนสมเหตุสมผล แต่ไม่แน่ใจว่าตัวเลือกใดดีที่สุด โซลูชั่นที่เป็นไปได้ ซิงค์ดารา สำหรับหนึ่งฉันสามารถใช้ตัวอย่าง actixแต่มันค่อนข้างซับซ้อนและต้องมีการสร้างแผ่นสำเร็จรูปสำเร็จรูปอย่างยุติธรรม ฉันหวังว่าจะมีทางออกที่สมเหตุสมผลมากกว่านี้ Actix_web::web::block เป็นอีกตัวเลือกหนึ่งที่ฉันสามารถใช้actix_web::web::blockเพื่อตัดฟังก์ชันการสืบค้นของฉันในอนาคต แต่ฉันไม่แน่ใจเกี่ยวกับประสิทธิภาพของสิ่งนี้ คิวรีนั้นทำงานในระบบ Tokio เดียวกันหรือไม่ จากสิ่งที่ฉันสามารถหาในแหล่งที่มาของมันจะสร้างการตั้งกระทู้ในพื้นฐาน threadpool นั่นเป็นปัญหาหรือไม่? หากฉันอ่านรหัสถูกต้อง r2d2 จะบล็อกเธรดเมื่อรับการเชื่อมต่อซึ่งจะบล็อกส่วนหนึ่งของคอร์แอกทีฟเว็บหลัก เช่นเดียวกับการสืบค้นฐานข้อมูล นี่จะบล็อก actix-web ทั้งหมดหรือไม่ถ้าฉันทำแบบสอบถามมากกว่าฉันมีเธรดในกลุ่มนั้น ถ้าเป็นเช่นนั้นปัญหาใหญ่ Futures-cpupool สุดท้ายเดิมพันที่ปลอดภัยที่อาจมีค่าใช้จ่ายบางส่วนที่ไม่จำเป็นเป็นฟิวเจอร์ส-cpupool ปัญหาหลักคือสิ่งนี้หมายถึงการเพิ่มลังอื่นให้กับโครงการของฉันแม้ว่าฉันจะไม่ชอบแนวคิดของซีพียูหลายตัวที่ลอยอยู่รอบ ๆ ในแอปพลิเคชันของฉันโดยไม่จำเป็น เนื่องจากทั้ง r2d2 และดีเซลจะปิดกั้นมีสิ่งที่น่าประหลาดใจจำนวนมากในที่นี่ ที่สำคัญที่สุดอย่าแชร์ cpupool นี้กับสิ่งใด ๆ ที่ไม่ได้ใช้พูล r2d2 เดียวกัน (เนื่องจากเธรดทั้งหมดที่สร้างขึ้นอาจบล็อกรอการเชื่อมต่อ r2d2 ล็อคพูลทั้งหมดเมื่อมีงาน) ประการที่สอง (ชัดเจนขึ้นเล็กน้อย) …