คำถามของฉัน: แอปพลิเคชั่นประเภทใดที่ต้องการเธรดการทำงานพร้อมกันจำนวนมาก?
1) ความจริงที่ว่าภาษา "ตาชั่ง" หมายความว่ามีโอกาสน้อยที่คุณจะต้องทิ้งภาษานั้นเมื่อสิ่งต่าง ๆ มีความซับซ้อนมากขึ้นตามถนน (นี่เรียกว่าแนวคิด "ผลิตภัณฑ์ทั้งหมด") หลายคนกำลังทิ้ง Apache สำหรับ Nginx ด้วยเหตุผลนี้ หากคุณอยู่ใกล้กับ "ขีด จำกัด สูงสุด" ที่กำหนดโดยค่าใช้จ่ายของกระทู้คุณจะกลัวและเริ่มคิดหาวิธีที่จะผ่านมันไป เว็บไซต์ไม่สามารถคาดการณ์ปริมาณการรับส่งข้อมูลได้ดังนั้นการใช้เวลาเพียงเล็กน้อยในการทำสิ่งต่าง ๆ ที่ปรับขนาดได้นั้นสมเหตุสมผล
2) หนึ่ง goroutine ต่อคำขอเพียงแค่เริ่มต้น มีเหตุผลมากมายที่จะใช้ goroutines ภายใน
- พิจารณาเว็บแอปที่มีคำร้องขอพร้อมกัน 100 คำร้องขอแต่ละคำขอสร้างคำขอแบ็คเอนด์ครบ 100 รายการ ตัวอย่างที่ชัดเจนคือเครื่องมือรวบรวมเครื่องมือค้นหา แต่แอพพลิเคชั่นใด ๆ ก็สามารถสร้างโกโรไทน์สำหรับ "พื้นที่" แต่ละรายการบนหน้าจอจากนั้นสร้างแอปเหล่านั้นแยกต่างหากแทน ตัวอย่างเช่นทุกหน้าใน Amazon.com ประกอบด้วยคำขอแบ็กเอนด์มากกว่า 150+ ชุดประกอบขึ้นเพื่อคุณโดยเฉพาะ คุณไม่สังเกตเห็นเพราะมันอยู่ในแนวขนานไม่ใช่ต่อเนื่องและ "พื้นที่" แต่ละอันคือบริการเว็บของตัวเอง
- พิจารณาแอพที่มีความน่าเชื่อถือและความหน่วงสูง คุณอาจต้องการแต่ละคำขอเข้ามาเพื่อปิดไฟคำขอ back-end น้อยและผลตอบแทนแล้วแต่จำนวนใดข้อมูลกลับมาเป็นอันดับแรก
- พิจารณา "ลูกค้าเข้าร่วม" ที่ทำในแอปของคุณ แทนที่จะพูดว่า "สำหรับแต่ละองค์ประกอบรับข้อมูล" คุณสามารถแยก goroutines ออกเป็นกลุ่มได้ หากคุณมีฐานข้อมูลทาสจำนวนมากที่จะสืบค้นคุณจะได้เวลา N เร็วขึ้นอย่างน่าอัศจรรย์ ถ้าคุณทำไม่ได้มันจะไม่ช้าลง
hit diminishing จะส่งกลับเมื่อจำนวนเธรด / กระบวนการมากกว่าจำนวนแกนประมวลผล
ผลการดำเนินงานไม่ได้เป็นเหตุผลเดียวที่จะเลิกโปรแกรมลงCSP จริง ๆ แล้วมันสามารถทำให้โปรแกรมเข้าใจง่ายขึ้นและปัญหาบางอย่างสามารถแก้ไขได้ด้วยรหัสน้อยกว่ามาก
เช่นเดียวกับสไลด์ที่ลิงก์ด้านบนการมีการทำงานพร้อมกันในรหัสของคุณเป็นวิธีการจัดการปัญหา การไม่มีโกโรไทน์เหมือนไม่มีโครงสร้างข้อมูล Map / Dictonary / Hash ในภาษาของคุณ คุณสามารถรับโดยไม่ได้ แต่เมื่อคุณมีแล้วคุณจะเริ่มใช้มันได้ทุกที่และทำให้โปรแกรมของคุณง่ายขึ้น
ในอดีตสิ่งนี้หมายถึง "การเขียนโปรแกรมแบบมัลติเธรดของคุณเอง" แต่มันซับซ้อนและอันตราย - ยังไม่มีเครื่องมือมากมายที่จะทำให้แน่ใจว่าคุณไม่ได้สร้างเผ่าพันธุ์ และคุณจะป้องกันผู้ดูแลในอนาคตจากการทำผิดพลาดได้อย่างไร? หากคุณดูโปรแกรมขนาดใหญ่ / ซับซ้อนคุณจะเห็นว่าพวกเขาใช้ทรัพยากรจำนวนมากไปในทิศทางนั้น
เนื่องจากการทำงานพร้อมกันไม่ใช่ส่วนหนึ่งของภาษาส่วนใหญ่โปรแกรมเมอร์ในปัจจุบันจึงมีจุดบอดว่าทำไมจึงมีประโยชน์กับพวกเขา สิ่งนี้จะเห็นได้ชัดมากขึ้นเมื่อโทรศัพท์และนาฬิกาข้อมือหันไปที่ 1,000 คอร์ ใช้งานเครื่องมือตรวจจับการแข่งขันในตัว