worker หนึ่งตัวพบพร็อกซีที่ใช้งานได้ คุณส่งคืนที่อยู่ เรียก cancel บน future อื่น ๆ และคาดว่ากิจกรรมเครือข่ายจะหยุด อาจไม่หยุดก็ได้

Future สามารถถูกยกเลิกก่อนที่ callable จะเริ่ม เมื่อเธรดกำลังเรียกใช้คำขออยู่แล้ว การยกเลิก Future ของเธรดนั้นไม่ขัดจังหวะการทำงานของซ็อกเก็ตนั้น worker ต้องการการทำงานเครือข่ายที่มีขอบเขตของตัวเองและเส้นทางการทำความสะอาด

อายุการใช้งานของ executor ก็สำคัญ การออกจากบริบท ThreadPoolExecutor จะรอให้งานเสร็จ การพบผลลัพธ์เร็วหนึ่งรายการแล้วรอ worker ที่ช้าหลายตัวอาจทำให้ความล่าช้ารวมของผู้เรียกไม่เหมือนกับเวลาแฝงที่ผู้ชนะรายงานเลย

จำกัดการแข่งขันก่อนเริ่ม

  • จำกัดจำนวนการตรวจสอบพร้อมกันแทนการส่งรายการสาธารณะที่ไม่จำกัด รายการพร็อกซีฟรี ให้ผู้สมัครสำหรับอินพุตของผู้ตรวจสอบ โดยเก็บโปรโตคอลของแต่ละปลายทางไว้ให้ worker
  • ให้แต่ละคำขอมีนโยบายการเชื่อมต่อและการอ่านที่เหมาะสม
  • ให้งบประมาณการตัดสินใจโดยรวมแก่ผู้เรียก
  • กำหนดว่าใครจะระบายหรือปิดผลลัพธ์จาก worker ที่มีอายุยืนกว่าการตัดสินใจ

การรอ Future น้อยลงไม่เหมือนกับการทำให้คำขอพื้นฐานสั้นลง เช่นเดียวกัน การทิ้งผลลัพธ์ไม่ได้ปล่อยทรัพยากรเครือข่ายทั้งหมดทันที

ผลลัพธ์ที่สำเร็จรายการแรกก็เป็นเพียงการตรวจสอบที่สำเร็จรายการแรกเท่านั้น มันอาจขึ้นอยู่กับการจัดตาราง การเชื่อมต่อที่แคชไว้ และปลายทางการตรวจสอบเฉพาะ ไม่ได้ยืนยันว่าปลายทางนั้นเร็วที่สุดในระดับสากลหรือว่างานจริงจะสำเร็จ

บ่อยครั้งพูลเล็ก ๆ ที่เก็บไว้พร้อมการสังเกตล่าสุดนั้นง่ายกว่าการแข่งขันกับรายการทั้งหมดก่อนทุกการดาวน์โหลด ใช้ผลลัพธ์ของการดำเนินการจริงเพื่ออัปเดตบันทึก พร้อมกับ นโยบายการกู้คืนที่ควบคุมได้สำหรับความล้มเหลว การตรวจสอบล่วงหน้าควรคุ้มค่ากับต้นทุน แทนที่จะเพิ่มงานทุกอย่างเป็นสองเท่าตามนิสัย

บทความที่เกี่ยวข้อง