Jika saya mengerti, model aktor seperti model objek, tetapi dengan beberapa perbedaan:
- SETIAP objek memunculkan thread tersendiri dan tidak masalah bahkan ketika Anda memiliki ribuan objek.
- Aktor tidak berinteraksi dengan memanggil fungsi dan mendapatkan nilai balik melainkan dengan mengirim dan menerima pesan.
- Jika Anda tidak melanggar model itu, aplikasi Anda akan menggunakan konkurensi dengan kekuatan penuh tanpa risiko kondisi balapan.
- Semua yang dapat Anda lakukan di OO dapat Anda lakukan dengan menggunakan aktor tetapi lebih baik, masalahnya adalah bahwa semua yang kami kodekan pada tahun-tahun terakhir berbasis OO - tetapi transisi akan segera terjadi.
Jadi misalnya, misalkan saya harus mendefinisikan kelas / aktor vektor 3d, buat dua contoh dan panggil operasi penjumlahan pada mereka.
BERORIENTASI PADA OBJEK:
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
MODEL AKTOR:
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
}
Itu saja? Atau saya benar-benar salah?