ฉันเคยได้ยินนักพัฒนาพูดถึงว่า Java ไม่สามารถ " ทำแบบเรียลไทม์ " ซึ่งหมายความว่าแอป Java ที่ทำงานบน Linux ไม่สามารถตอบสนองความต้องการของระบบเรียลไทม์ที่กำหนดขึ้นเช่นสิ่งที่รันบน RIOT-OS เป็นต้น
ฉันกำลังพยายามที่จะเข้าใจว่าทำไม SWAGของฉันบอกฉันว่านี่อาจเป็นเพราะส่วนใหญ่ของ Garbage Collector ของ Java ซึ่งสามารถทำงานได้ตลอดเวลาและหยุดระบบโดยสิ้นเชิง และถึงแม้ว่าจะมีสิ่งที่เรียกว่า "GCS ที่หยุดชั่วคราว" แต่ฉันก็ไม่จำเป็นต้องเชื่อโฆษณาของพวกเขาและยังไม่มีอินสแตนซ์ $ 80K-per-JVM เพื่อแยกโครงการงานอดิเรก!
ผมยังอ่านบทความนี้เกี่ยวกับการใช้ซอฟแวร์เสียงหึ่งๆบน Linux ในบทความนั้นผู้เขียนอธิบายสถานการณ์ที่ลีนุกซ์เกือบทำเสียงขึ้นจมูกชนเข้ากับรถ:
ฉันเรียนรู้บทเรียนที่ยากลำบากหลังจากเลือกที่จะทำลูปควบคุมระดับต่ำ (PIDs) บน Pi - พยายามที่จะฉลาดฉันตัดสินใจใส่บันทึกการเขียนที่อยู่ตรงกลางของลูปสำหรับการดีบั๊ก - Quad เริ่มต้นดี แต่แล้ว Linux ก็ตัดสินใจ ใช้เวลา 2 วินาทีในการเขียนบันทึกรายการหนึ่งและรูปสี่เหลี่ยมเกือบชนเข้ากับรถของฉัน!
ตอนนี้ถึงแม้ว่าผู้เขียนคนนั้นเขียนซอฟต์แวร์เสียงพึมพำของเขาใน C ++ แต่ฉันนึกภาพว่าแอป Java ที่ทำงานบน Linux อาจประสบชะตากรรมเดียวกันได้เป็นอย่างดี
ตามที่ Wikipedia:
ระบบถูกกล่าวว่าเป็นแบบเรียลไทม์หากความถูกต้องทั้งหมดของการดำเนินการไม่เพียง แต่ขึ้นอยู่กับความถูกต้องเชิงตรรกะเท่านั้น แต่ยังขึ้นอยู่กับเวลาที่มันถูกดำเนินการด้วย
สำหรับฉันนี่หมายความว่า " คุณไม่มีเวลาจริงหากความถูกต้องทั้งหมดต้องการความถูกต้องเชิงตรรกะและความตรงต่อเวลา "
ลองทำเป็นว่าฉันได้เขียนแอพ Java ให้มีประสิทธิภาพยอดเยี่ยมและฉันก็ "บีบมะนาว" เพื่อที่จะพูดและมันก็ไม่สามารถเขียนได้เร็วพอสมควร (ใน Java)
โดยรวมแล้วคำถามของฉันคือ: ฉันกำลังมองหาใครบางคนที่จะอธิบายให้ฉันทั้งหมด / ส่วนใหญ่เหตุผลว่าทำไมแอป Java ที่ใช้ n Linux ไม่สามารถเป็น "แอปแบบเรียลไทม์" ความหมายอะไรคือหมวดหมู่ทั้งหมดของสิ่งต่าง ๆ บน Java / Linux สแต็กที่ป้องกันไม่ให้ "ถูกทันเวลา" และดังนั้นจากการ " ถูกต้องทั้งหมด "? ตามที่กล่าวไว้ดูเหมือนว่าการล้างข้อมูลบันทึกของ GC และ Linux สามารถหยุดการทำงานได้ชั่วคราว แต่ฉันแน่ใจว่ามีสิ่งอื่นนอกแอปพลิเคชัน Java ที่จะทำให้เกิดเวลา / ประสิทธิภาพที่ไม่ดีและทำให้ข้อ จำกัด กำหนดเวลายาก พวกเขาคืออะไร