Saya telah menyaksikan peningkatan visibilitas bahasa dan fitur pemrograman fungsional untuk sementara waktu. Saya memeriksa mereka dan tidak melihat alasan pengajuan banding.
Kemudian, baru-baru ini saya menghadiri presentasi "Basics of Erlang" Kevin Smith di Codemash .
Saya menikmati presentasi dan belajar bahwa banyak atribut dari pemrograman fungsional membuatnya lebih mudah untuk menghindari masalah threading / konkurensi. Saya memahami kurangnya status dan mutabilitas membuat beberapa utas tidak mungkin mengubah data yang sama, tetapi Kevin mengatakan (jika saya mengerti dengan benar) semua komunikasi terjadi melalui pesan dan pesan diproses secara sinkron (sekali lagi menghindari masalah konkurensi).
Tetapi saya telah membaca bahwa Erlang digunakan dalam aplikasi yang sangat skalabel (alasan utama Ericsson membuatnya sejak awal). Bagaimana bisa efisien menangani ribuan permintaan per detik jika semuanya ditangani sebagai pesan yang diproses secara sinkron? Bukankah itu alasan kita mulai beralih ke pemrosesan asinkron - jadi kita dapat memanfaatkan menjalankan beberapa utas operasi pada saat yang sama dan mencapai skalabilitas? Sepertinya arsitektur ini, meski lebih aman, adalah langkah mundur dalam hal skalabilitas. Apa yang saya lewatkan?
Saya memahami pencipta Erlang sengaja menghindari dukungan threading untuk menghindari masalah konkurensi, tetapi saya pikir multi-threading diperlukan untuk mencapai skalabilitas.
Bagaimana bahasa pemrograman fungsional dapat secara inheren aman untuk thread, namun tetap berskala?