ถ้าฉันเข้าใจโมเดลนักแสดงก็เหมือนโมเดลวัตถุ แต่มีความแตกต่างเล็กน้อย:
- วัตถุทุกตัวมีเธรดแยกต่างหากและไม่มีปัญหาแม้ว่าคุณจะมีวัตถุนับพัน
- นักแสดงไม่ได้มีปฏิสัมพันธ์โดยการเรียกฟังก์ชั่นและรับค่าตอบแทน แต่เป็นการส่งและรับข้อความแทน
- หากคุณไม่ละเมิดรูปแบบดังกล่าวแอปของคุณจะใช้การทำงานพร้อมกันให้เต็มกำลังโดยไม่มีความเสี่ยงจากสภาพการแข่งขัน
- ทุกสิ่งที่คุณสามารถทำได้ใน OO คุณสามารถใช้นักแสดง แต่ดีกว่าปัญหาที่ว่าทุกอย่างที่เราเขียนในปีที่ผ่านมาเป็น OO แต่การเปลี่ยนแปลงนั้นใกล้เข้ามาแล้ว
ตัวอย่างเช่นสมมติว่าฉันต้องกำหนดคลาสเวกเตอร์ 3d / นักแสดงสร้างอินสแตนซ์ที่สองและเรียกใช้การดำเนินการรวมกับพวกเขา
วัตถุที่มุ่งเน้น:
class V3d {
constructor V3d(x,y,z) //bla
float x,y,z;
function sum(V3d b)
{
return V3d(x+b.x,y+b.y,z+b.z);
}
}
//using:
mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly
drawPoint(mySum) //uses the result
รุ่นนักแสดง:
actor V3d
{
constructor V3d(x,y,z) //bla
float x,y,z;
loop
{
receive 'sum',b:V3d :
send(caller,'sumResult',V3d(x+b.x,y+b.y,z+b.z))
}
}
//using:
send(V3d(1,2,3),'sum',V3d(3,2,1)) //creates 2 instances, send to the first one a request to sum with the second one
loop
{
receive 'sumResult',result:
drawPoint(result) //receives result and draws it
}
มันคืออะไร หรือฉันผิดอย่างสมบูรณ์?