ฉันถูกต้องหรือไม่ที่บอกว่าสำหรับเว็บแอปพลิเคชั่นเว็บคอนเทนเนอร์จะดูแลมัลติเธรดหรือไม่
เว็บเซิร์ฟเวอร์ส่วนใหญ่ (Java และอื่น ๆ รวมถึง JBoss) เป็นไปตามรูปแบบ "หนึ่งเธรดต่อคำขอ" นั่นคือแต่ละคำขอ HTTP จะถูกประมวลผลอย่างสมบูรณ์โดยหนึ่งกระทู้ เธรดนี้มักจะใช้เวลาส่วนใหญ่รอสิ่งต่าง ๆ เช่นการร้องขอ DB เว็บคอนเทนเนอร์จะสร้างเธรดใหม่ตามความจำเป็น
เซิร์ฟเวอร์บางตัว (ในระบบนิเวศ Java ส่วนใหญ่เป็นNetty ) ทำการจัดการคำขอแบบอะซิงโครนัสทั้งที่มีโมเดล "หนึ่งเธรดทำทุกอย่าง" หรือสิ่งที่ซับซ้อนกว่า แนวคิดพื้นฐานคือมีการรอเธรดจำนวนมากทำให้สิ้นเปลืองทรัพยากรดังนั้นการทำงานแบบอะซิงโครนัสจะมีประสิทธิภาพมากขึ้น
ถ้าเป็นเช่นนั้นฉันสามารถแนะนำดอกยางใหม่ในแอพพลิเคชั่นบนเว็บได้หรือไม่?
เป็นไปได้ แต่ควรทำอย่างระมัดระวังเนื่องจากข้อผิดพลาด (เช่นการรั่วไหลของหน่วยความจำหรือการประสานที่ขาดหายไป) สามารถทำให้เกิดข้อบกพร่องที่ยากที่จะทำซ้ำหรือทำให้เซิร์ฟเวอร์ทั้งหมดล่ม
มีข้อได้เปรียบในการทำเช่นนั้นหรือไม่และในสถานการณ์ใดที่จะต้องทำเช่นนั้น?
ข้อดีคือคุณสามารถทำสิ่งต่าง ๆ ในแบบคู่ขนาน การใช้เธรดเพื่อปรับปรุงความเร็วในการคำนวณล้วนเป็นสิ่งที่คุณไม่ควรทำบนเว็บเซิร์ฟเวอร์เพราะมันจะทำให้การจัดการคำขออื่นช้าลง สิ่งนั้นควรทำในเซิร์ฟเวอร์แยกต่างหากอาจใช้คิวงานบางประเภท
สถานการณ์ที่ถูกต้องตามกฎหมายสำหรับการทำมัลติเธรดในบริบทของการจัดการคำขอ HTTP อาจเป็นได้ถ้าคุณต้องการเข้าถึงทรัพยากรเครือข่ายอื่น ๆ เช่นเรียกใช้บริการเว็บต่างๆ หากคุณทำในทราฟเดียวคุณต้องรอให้การโทรแต่ละครั้งสิ้นสุดลง แต่ถ้าคุณใช้หลายเธรดเวลาที่รอทั้งหมดเป็นเพียงการหน่วงเวลาของการเรียกที่ช้าที่สุด
Concurrency Utilities
แนะนำ EE7