Saya pikir perusahaan Anda seharusnya tidak menggunakan multithreading.
Setelah melakukan proyek multithread secara besar-besaran, saya menemukan dua teknik sangat penting untuk membuat hal-hal bekerja. Pertama , kode harus ditulis dengan benar. Setiap bidang harus diperiksa secara manual untuk memastikan itu dinyatakan dengan benar dan disinkronkan dengan benar di mana pun direferensikan. (Peringatan: Saya menyederhanakan beberapa hal di sini untuk menjaga jawaban saya pendek - atau setidaknya, lebih pendek.) Kedua , kode harus diuji dengan menjalankannya pada mesin tunggal dan multicore - banyak menit menggunakan 100% dari masing-masing inti. (Dan jika hanya menggunakan 2% dari setiap inti, seperti yang sering saya lakukan, itu juga bug.)
Anda mungkin dapat mengelola ini, tetapi organisasi Anda tidak bisa. Bahkan jika mereka memahami masalah, yang tidak mereka miliki, mereka tidak memiliki keahlian.
Sebagian besar bahasa menyediakan cara untuk menghindari hal ini. Jika Anda memiliki pembaca soket, yang biasanya memiliki utasnya sendiri, mintalah ia mendapatkan info ke utas utama secepat dan sesederhana mungkin. Lebih baik lagi, cari kelas / fungsi sistem yang akan menangani bagian utas bacaan untuk Anda. Gunakan antrian yang menjalankan "acara" satu demi satu, seperti yang dilakukan sebagian besar API GUI. (Gunakan antrian acara GUI API sendiri, dalam hal ini.) Jika Anda membutuhkan pemrosesan paralel, Anda mungkin dapat menemukan semacam "utas pekerja" yang memungkinkan Anda menyimpan data / bidang dalam satu utas, menangani semua transfer untuk Anda.
Tekankan untuk semua bahaya multithreading. (Cerita menyeramkan: Bug favorit saya melibatkan beberapa baris seperti int i = 5; i = i * i;
:, yang menghasilkan i
nilai 35. Satu yang sering saya lihat adalah: if (thing != null) thing.reset();
melempar pengecualian pointer nol.) Saya pikir satu-satunya harapan Anda adalah membuat mereka mengerti bahwa mereka melangkah ke dunia yang baru dan aneh, dan mungkin mereka harus mengambil satu langkah besar ke belakang.
Saya tidak begitu yakin bagaimana multithreading harus ditangani. Jika pekerjaan itu dapat diberikan kepada satu orang, dan semua yang mereka lakukan dibuang jika mereka gagal, baik-baik saja. Tetapi sebuah tim hanya akan sekuat anggota terlemahnya, dan bahkan seorang programmer yang baik akan mengalami masalah dengan multithreading penuh. Saya harap bahasa orang akan menemukan cara untuk membuatnya aman. Saya telah melihat beberapa perangkat lunak yang membantu di luar sana. Tapi saya pikir yang terbaik adalah menghindari multithreading kecuali waktu eksekusi sangat penting dan programmer yang baik atau tim yang terbukti tersedia.