Pelajaran apa yang Anda pelajari dari proyek yang hampir / benar-benar gagal karena multithreading yang buruk?
Kadang-kadang, kerangka kerja memaksakan model threading tertentu yang membuat urutan urutan besarnya lebih sulit untuk diperbaiki.
Bagi saya, saya belum pulih dari kegagalan terakhir dan saya merasa lebih baik saya tidak mengerjakan apa pun yang berkaitan dengan multithreading dalam kerangka itu.
Saya menemukan bahwa saya bagus dalam masalah multithreading yang memiliki fork / join sederhana, dan di mana data hanya bergerak dalam satu arah (sementara sinyal dapat melakukan perjalanan dalam arah melingkar).
Saya tidak dapat menangani GUI di mana beberapa pekerjaan hanya dapat dilakukan pada utas yang disambungkan secara serial ("utas utama") dan pekerjaan lain hanya dapat dilakukan pada utas apa pun kecuali utas utama ("utas pekerja"), dan di mana data dan pesan harus melakukan perjalanan ke semua arah antara komponen N (grafik yang terhubung penuh).
Pada saat saya meninggalkan proyek itu untuk proyek lain, ada masalah kebuntuan di mana-mana. Saya mendengar bahwa 2-3 bulan kemudian, beberapa pengembang lain berhasil memperbaiki semua masalah kebuntuan, hingga dapat dikirim ke pelanggan. Saya tidak pernah berhasil menemukan bahwa saya tidak memiliki pengetahuan yang hilang.
Sesuatu tentang proyek: jumlah ID pesan (nilai integer yang menggambarkan arti dari suatu peristiwa yang dapat dikirim ke antrian pesan objek lain, terlepas dari threading) mencapai beberapa ribu. String unik (pesan pengguna) juga mengalami sekitar seribu.
Ditambahkan
Analogi terbaik yang saya dapatkan dari tim lain (tidak terkait dengan proyek saya dulu atau sekarang) adalah "memasukkan data ke dalam basis data". ("Basis data" mengacu pada sentralisasi dan pembaruan atom.) Dalam GUI yang terpecah menjadi beberapa tampilan, semua berjalan pada "utas utama" yang sama dan semua pengangkatan berat non-GUI dilakukan dalam utas pekerja individu, data aplikasi harus disimpan dalam satu tempat yang bertindak seperti Database, dan biarkan "Database" menangani semua "pembaruan atom" yang melibatkan dependensi data yang tidak sepele. Semua bagian lain dari GUI hanya menangani gambar layar dan tidak ada yang lain. Bagian UI dapat men-cache hal-hal dan pengguna tidak akan melihat jika basi hanya sepersekian detik, jika itu dirancang dengan benar. "Database" ini juga dikenal sebagai "dokumen" dalam arsitektur Document-View. Sayangnya - tidak, aplikasi saya sebenarnya menyimpan semua data di Views. Saya tidak tahu mengapa seperti itu.
Kontributor kontributor:
(kontributor tidak perlu menggunakan contoh nyata / pribadi. Pelajaran dari contoh anekdotal, jika dinilai sendiri dapat dipercaya, juga diterima.)