Dengan cara apa yang berarti Erlang mencegah kondisi ras dalam pemrograman bersamaan?

11

Membaca tentang konkurensi di Erlang , mengingatkan saya pada toolkit konkurensi Akka . Keduanya memberi Anda alat untuk mencegah atau membatasi kondisi balapan . Tapi Anda bisa mengirim tautan ke data yang bisa diubah ke proses lain menggunakan toolkit Akka, yang masih tidak aman. Saya melihat Akka sebagai alat yang berguna, tetapi tidak memberikan perlindungan terhadap akses yang tidak teratur ke objek dan data yang mengarah ke kondisi ras, kebuntuan, dan / atau kelaparan. Itu tidak mencegah Anda dari menulis kode yang tidak aman cara Java atau C # melindungi Anda dari menulis sebagian besar jenis kebocoran memori yang dapat Anda tulis dalam C ++ (Anda masih dapat membuat kebocoran memori di Jawa dengan menipu pengumpul sampah, tetapi itu kurang masalah daripada harus ingat untuk membebaskan setiap byte yang Anda alokasikan).

Apakah Erlang menjamin tingkat kebenaran, kinerja, dan ketahanan dalam pemrograman bersamaan? Saya pikir sistem operasi memberikan perlindungan ketika mengakses sumber daya sistem (dengan asumsi penulis driver melakukan pekerjaannya dengan baik). Database ACID memberikan perlindungan untuk pembacaan dan pembaruan. Jadi sepertinya ini adalah masalah yang bisa dipecahkan. Atau apakah solusi umum yang aman akan menghapus keuntungan kinerja yang disediakan concurrency? Apakah bahasa atau toolkit lain memberikan jenis keamanan bersamaan yang dilakukan Erlang (atau tidak)?

Ini adalah pertanyaan lanjutan untuk komentar @ Malfist pada jawaban @ user1249 untuk Bahasa pemrograman apa yang menghasilkan bug paling sulit ditemukan? .

GlenPeterson
sumber

Jawaban:

19

Ada beberapa hal yang dilakukan Erlang untuk membantu ini.

  • Data tidak dapat diubah, jadi tidak ada data balapan
  • OTP gen_servers dan gen_fsm's menyediakan pola yang diuji dengan sangat baik untuk server
  • Pengawas memungkinkan pemulihan dari kerusakan
  • prosesnya kecil dan murah
  • Memori dialokasikan berdasarkan per proses (tidak ada pembekuan GC)
  • erlang VM dioptimalkan untuk bekerja di bawah beban yang sangat berat
  • Perangkat lunak dapat dimutakhirkan dengan cepat, sehingga tidak ada waktu henti untuk meningkatkan

Hal utama di sini adalah bahwa di Erlang tidak ada keadaan bersama yang bisa memerlukan kunci, jadi tidak perlu kunci. Ini adalah bahasa yang brilian untuk aplikasi waktu nyata lunak yang tidak memerlukan downtime dan toleransi kesalahan dan konkurensi yang tinggi

Zachary K
sumber
12
@JarrodRoberson: Sebenarnya, poin utama adalah keadaan tidak bisa dibagikan bersama . Status berbagi tidak masalah jika Anda tidak mengubahnya. Keadaan tidak berubah tidak masalah jika Anda tidak membagikannya.
Jörg W Mittag
1
Ada juga alat baru Concuerror youtube.com/watch?v=FpkjKN9wTKg yang memungkinkan Anda menjalankan tes dengan semua kemungkinan acara
Zachary K