Mesin C ++ yang sedang saya kerjakan saat ini dibagi menjadi beberapa thread-Generasi besar (untuk membuat konten prosedural saya), Gameplay (untuk AI, skrip, simulasi), Fisika, dan Rendering.
Utas berkomunikasi satu sama lain melalui objek pesan kecil, yang berpindah dari utas ke utas. Sebelum melangkah, utas memproses semua pesannya yang masuk - pembaruan untuk mentransformasikan, menambah dan menghapus objek, dll. Terkadang satu utas (Generasi) akan membuat sesuatu (Seni) dan meneruskannya ke utas lain (Rendering) untuk kepemilikan permanen.
Di awal proses dan saya perhatikan beberapa hal:
Sistem pengiriman pesan rumit. Membuat jenis pesan baru berarti mensubkelas kelas pesan dasar, membuat enum baru untuk jenisnya, dan menulis logika bagaimana thread harus menafsirkan jenis pesan baru. Ini adalah peningkatan kecepatan untuk pengembangan dan rentan terhadap kesalahan ketik. (Sidenote - mengerjakan ini membuat saya menghargai betapa hebatnya bahasa dinamis!)
Apakah ada cara yang lebih baik untuk melakukan ini? Haruskah saya menggunakan sesuatu seperti boost :: bind untuk membuat ini otomatis? Saya khawatir jika saya melakukannya saya kehilangan kemampuan untuk mengatakan, mengurutkan pesan berdasarkan jenis, atau sesuatu. Tidak yakin apakah manajemen semacam itu bahkan akan diperlukan.
Poin pertama adalah penting karena utas ini sangat berkomunikasi. Membuat dan menyampaikan pesan adalah bagian besar untuk mewujudkan sesuatu. Saya ingin merampingkan sistem itu, tetapi juga terbuka untuk paradigma lain yang mungkin sama membantu. Apakah ada desain multithreaded berbeda yang harus saya pikirkan untuk membantu mempermudah ini?
Misalnya, ada beberapa sumber yang jarang ditulis, tetapi sering dibaca dari banyak utas. Haruskah saya terbuka pada gagasan memiliki data bersama, dilindungi oleh mutex, bahwa semua utas dapat mengakses?
Ini adalah pertama kalinya saya merancang sesuatu dengan multithreading dalam pikiran dari bawah ke atas. Pada tahap awal ini saya benar-benar berpikir itu berjalan sangat baik (mempertimbangkan) tetapi saya khawatir tentang penskalaan, dan efisiensi saya sendiri dalam mengimplementasikan hal-hal baru.