Sumber kongsi, konflik, akses dikongsi - 1

"Hai, Amigo! Saya ingin memberitahu anda tentang perkongsian sumber. Merentasi urutan yang berbeza, secara semula jadi.

"Saya terus bercakap tentang masalah yang berlaku apabila bekerja dengan berbilang benang dan cara menyelesaikannya. Ini tidak bermakna menggunakan benang adalah buruk. Benang ialah alat yang sangat berkuasa. Malah, mereka membenarkan anda membuat program anda lebih pantas dan malah lebih dipercayai. Lebih kompleks sesuatu program, lebih banyak benang dan pelbagai bahagian bebas yang ada padanya."

"Memisahkan program kepada bahagian bebas (berganding longgar) sangat bermanfaat."

"Bayangkan program anda dibahagikan secara dalaman kepada 100 utas. Tetapi anda hanya mempunyai pemproses dwi-teras. Ini bermakna secara purata 50 utas akan dilaksanakan pada setiap teras."

"Jika anda perlu meningkatkan prestasi program, anda hanya membeli pelayan dwi-pemproses dan beberapa pemproses manis untuknya. Ini boleh membawa anda sehingga 32 teras, menghasilkan peningkatan prestasi 2-20 kali ganda. Bergantung pada bilangan daripada bahagian yang benar-benar bebas ia dibahagikan kepada."

"Ini adalah salah satu sebab Java mendominasi dalam pembangunan perusahaan. Jika sebuah syarikat mempunyai program dalaman yang kompleks yang ditulis oleh 20 pembangun, maka adalah lebih murah untuk membeli pelayan lain daripada menggandakan prestasi program melalui pengoptimuman."

"Jadi itu semua tentangnya."

"Tetapi! Setiap kali pembangun memutuskan untuk menggunakan utas lain, dia menyelesaikan satu masalah dan mencipta dua. Semakin banyak utas tidak akan meningkatkan prestasi program tanpa henti."

"Pertama, mana-mana program mempunyai kerja yang tidak boleh dipecahkan dan dijalankan secara selari pada benang yang berbeza. Kedua, semua benang dilaksanakan pada pemproses yang sama. Semakin banyak benang yang anda ada, semakin perlahan setiap satu berfungsi."

"Dan, yang paling penting, benang sering menggunakan objek yang sama (biasanya dipanggil 'sumber kongsi')."

"Sebagai contoh, benang ingin menyimpan maklumat tentang kerja yang telah disiapkannya dalam fail. Jika terdapat beberapa utas sedemikian dan mereka ingin menulis maklumat pada fail yang sama, mereka akan mengganggu satu sama lain. Untuk mengelakkan fail daripada menjadi keadaan huru-hara, akses kepada fail adalah terhad, iaitu semasa satu utas menggunakan fail, yang lain menunggu."

"Ya, saya ingat. Anda melakukannya menggunakan kata kunci yang disegerakkan ."

"Sangat tepat."

"Dan bagaimana jika benang menulis ke fail yang berbeza?"

"Secara rasmi, ini adalah objek yang berbeza, tetapi mereka mungkin berada pada cakera keras yang sama."

"Jadi, adakah mungkin untuk menyelaraskan sesuatu di dalam pemproses?"

"Secara teknikal, ya, tetapi sebaik sahaja utas anda memerlukan sesuatu selain data yang ada padanya, sesuatu itu mungkin telah diduduki oleh utas lain—dan utas anda perlu menunggu."

"Nah, apa yang perlu saya lakukan? Bagaimana saya tahu sama ada saya perlu membuat banyak benang atau tidak?"

"Ini ditentukan secara langsung oleh seni bina program anda. Setiap projek mempunyai 'arkitek' sendiri yang mengetahui semua 'sumber' yang digunakan dalam program, mengetahui batasannya, dan sejauh mana ia disejajarkan dengan baik/buruk."

"Dan jika saya tidak tahu?"

"Terdapat dua pilihan:"

a) bekerja di bawah pengawasan seseorang yang melakukannya

b) dapatkan beberapa ketulan memikirkannya sendiri

"Saya robot: Saya tidak mendapat ketulan-hanya kemek."

"Kalau begitu, dapatkan sedikit penyok."

"Saya faham. Terima kasih. Anda telah menjelaskan beberapa perkara yang saya sudah mula tertanya-tanya."