Dengan algoritma paralel yang mengetuk pintu, mungkin saat yang tepat untuk memikirkan penanganan kesalahan.
Jadi pada awalnya ada kode kesalahan. Mereka payah. Itu gratis untuk mengabaikan mereka, sehingga Anda bisa gagal terlambat dan menghasilkan kode sulit untuk debug.
Kemudian muncul pengecualian. Mereka dibuat mustahil untuk diabaikan begitu mereka muncul, dan kebanyakan orang (kecuali Joel) lebih menyukainya.
Dan sekarang kami punya perpustakaan yang membantu kode paralel. Masalahnya adalah, Anda tidak dapat menangani pengecualian dalam kode paralel semudah yang Anda bisa dengan kode non-paralel. Jika Anda meluncurkan tugas secara tidak sinkron dan melempar pengecualian, tidak ada jejak tumpukan melewatinya untuk melepas lelah; terbaik yang dapat Anda lakukan adalah menangkapnya dan mendaftarkannya pada objek tugas, jika ada objek seperti itu. Namun, itu mengalahkan kekuatan utama dari pengecualian: Anda harus memeriksanya dan Anda dapat mengabaikannya tanpa upaya tambahan , sedangkan dalam kode single-threaded, sebuah perkecualian akan memicu tindakan yang tepat (bahkan jika itu berarti menghentikan program Anda).
Bagaimana seharusnya implementasi bahasa atau perpustakaan mendukung kesalahan dalam kode paralel?
Jawaban:
Saya lebih suka panggilan balik untuk kesalahan yang dapat ditangani. Dan mereka dapat dibuat bekerja dengan baik secara asinkron ...
Tetapi untuk kesalahan yang tidak dapat ditangani, kesalahan yang benar-benar luar biasa , saya lebih suka melihat informasi yang relevan disimpan dan program dihentikan. Karena ini biasanya dilakukan melalui semacam penanganan kesalahan global, saya melihat tidak perlu mengubah pengecualian menjadi sesuatu yang berfungsi untuk ini - tetapi dukungan platform yang lebih baik untuk mendeteksi kesalahan kritis dan menghasilkan dump memori, dll. Akan menyenangkan.
sumber
Sepertinya Anda ingin memastikan bahwa tugas yang ditangani itu sendiri pengecualian, dan kemudian mengembalikan sesuatu yang membuat program panggilan tahu bahwa utas perlu ditutup. Maka akan memiliki logika untuk memproses hasil dari semua utas, mengetahui bahwa beberapa utas tersebut telah gagal.
sumber