วิธีการ scheduleExecutorService.scheduleAtFixedRate() ช่วยให้มั่นใจถึงการดำเนินการแบบเรียลไทม์ได้อย่างไร

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

ไม่มีใครรู้ว่าวิธีการนั้นทำงานภายในอย่างไร ตัวอย่างเช่นเมื่อเปรียบเทียบกับ sleep() แบบธรรมดาจะแน่ใจได้อย่างไรว่างานที่อ้างอิงได้รับการดำเนินการตามขั้นตอนเวลาคงที่จริง ๆ


person Markus    schedule 03.10.2009    source แหล่งที่มา


คำตอบ (2)


Java VM 'ปกติ' ไม่สามารถรับประกันแบบเรียลไทม์เกี่ยวกับเวลาดำเนินการได้ (และผลที่ตามมาก็คือเวลาการตั้งเวลาด้วย) หากคุณต้องการการรับประกันแบบเรียลไทม์ที่ยากจริงๆ คุณควรดู VM แบบเรียลไทม์เช่น จาวา RTS แน่นอนว่าคุณต้องมีระบบปฏิบัติการแบบเรียลไทม์ในกรณีนี้ด้วย

เกี่ยวกับการเปรียบเทียบกับ Thread.sleep(): ข้อดีของ scheduleExecutorService.scheduleAtFixedRate() เมื่อเปรียบเทียบกับการใช้งาน (ไร้เดียงสา) ของ Thread.sleep() คือมันไม่ได้รับผลกระทบจากเวลาดำเนินการของงานที่กำหนดเวลาไว้ ดู ScheduledFutureTask.runPeriodic() เกี่ยวกับวิธีการใช้งาน

person Kutzi    schedule 03.10.2009

คุณสามารถดูการใช้งาน OpenJDK7 ของ ScheduledThreadPoolExecutor java ซึ่งเป็นคลาสเดียวที่ใช้อินเทอร์เฟซ ScheduledExecutorService

อย่างไรก็ตามเท่าที่ฉันรู้มีการรับประกันใน ScheduledExecutorService เกี่ยวกับความถูกต้อง ดังนั้นแม้ว่าการวัดของคุณจะแสดงว่ามีความแม่นยำ แต่อาจไม่เป็นเช่นนั้นหากคุณเปลี่ยนไปใช้แพลตฟอร์มอื่น vm หรือ jdk

person Wolfgang    schedule 03.10.2009
comment
เนื่องจากชั้นเรียนใช้คลาสอื่นเป็นการภายในบ่อยมาก จึงเป็นเรื่องยากมากสำหรับฉันที่จะติดตามมัน แต่ฉันคิดว่านี่อาจเกี่ยวข้อง: ฉันพบว่างานถูกใส่ไว้ใน PriorityQueue ซึ่งอาจเรียงลำดับงานตามลำดับความสำคัญซึ่งหมายถึงเวลาดำเนินการที่คาดหวัง ดังนั้นจึงดูเหมือนว่าไม่มีการรับประกันแบบเรียลไทม์จริงๆ แต่เหตุใดแนวทางนี้จึงดีกว่าการนอนหลับ (อัตรา) บางทีคิวอาจสามารถรันเธรดที่มีลำดับความสำคัญสูงกว่าตัวอย่างตัวรวบรวมขยะเพื่อให้สามารถดำเนินงานได้เกือบจะแบบเรียลไทม์ - person Markus; 03.10.2009
comment
คุณหมายถึงเท่าที่ฉันรู้ว่ามีการรับประกัน ไม่ ใช่หรือไม่ - person Michael Easter; 17.01.2012