ฉันลองใช้มือกับ Akka (Java api) สิ่งที่ฉันพยายามคือการเปรียบเทียบรูปแบบการทำงานพร้อมกันของนักแสดง Akka กับแบบจำลองการทำงานพร้อมกันของ Java แบบธรรมดา (คลาส java.util.concurrent)
กรณีการใช้งานเป็นแผนที่มาตรฐานที่เรียบง่ายลดการใช้งานของจำนวนตัวอักษร ชุดข้อมูลเป็นชุดของสตริงที่สร้างแบบสุ่ม (ความยาว 400 ตัวอักษร) และคำนวณจำนวนสระในตัว
สำหรับ Akka ฉันใช้ BalancedDispatcher (สำหรับการปรับสมดุลโหลดระหว่างเธรด) และ RoundRobinRouter (เพื่อ จำกัด การทำงานของนักแสดงของฉัน) สำหรับ Java ฉันใช้เทคนิค fork fork (ใช้งานโดยไม่มีอัลกอริธึมการขโมยงาน) ที่จะแยกแผนที่ / ลดการประมวลผลและเข้าร่วมผลลัพธ์ ผลลัพธ์ระดับกลางถูกจัดขึ้นในการบล็อกคิวเพื่อให้การเข้าร่วมเป็นไปได้มากที่สุด อาจเป็นไปได้ว่าถ้าฉันไม่ผิดที่จะเลียนแบบแนวคิด "กล่องจดหมาย" ของนักแสดง Akka ที่พวกเขาได้รับข้อความ
การสังเกต: จนถึงขนาดกลางโหลด (~ 50000 อินพุตสตริง) ผลลัพธ์ที่ได้เปรียบเทียบได้แตกต่างกันเล็กน้อยในการทำซ้ำที่แตกต่างกัน อย่างไรก็ตามเมื่อฉันเพิ่มการโหลดเป็น ~ 100,000 มันจะหยุดการแก้ปัญหา Java ฉันกำหนดค่าโซลูชัน Java ด้วย 20-30 เธรดภายใต้เงื่อนไขนี้และล้มเหลวในการวนซ้ำทั้งหมด
การเพิ่มการโหลดเป็น 1000000 นั้นเป็นอันตรายต่อ Akka เช่นกัน ฉันสามารถแบ่งปันรหัสกับทุกคนที่สนใจจะมีการตรวจสอบข้าม
ดังนั้นสำหรับฉันดูเหมือนว่า Akka จะปรับขนาดได้ดีกว่าโซลูชันแบบมัลติเธรด Java แบบดั้งเดิม และเหตุผลอาจเป็นเพราะความมหัศจรรย์ของ Scala
ถ้าฉันสามารถสร้างโมเดลโดเมนปัญหาเป็นข้อความที่ขับเคลื่อนด้วยเหตุการณ์ส่งผ่านฉันคิดว่า Akka เป็นตัวเลือกที่ดีสำหรับ JVM
ทดสอบกับ: Java เวอร์ชัน: 1.6 IDE: Eclipse 3.7 Windows Vista 32 บิต 3GB ram โปรเซสเซอร์ Intel Core i5 ความเร็วสัญญาณนาฬิกา 2.5 GHz
โปรดทราบว่าโดเมนปัญหาที่ใช้สำหรับการทดสอบสามารถถกเถียงกันได้และฉันพยายามที่จะยุติธรรมเท่าที่ความรู้เกี่ยวกับ Java ของฉันอนุญาต :-)