Sumber daya bersama, konflik, akses bersama - 1

"Hai, Amigo! Saya ingin memberi tahu Anda tentang berbagi sumber daya. Di berbagai utas, tentu saja.

"Saya terus berbicara tentang masalah yang terjadi ketika bekerja dengan banyak utas dan bagaimana menyelesaikannya. Ini tidak berarti bahwa menggunakan utas itu buruk. Utas adalah alat yang sangat kuat. Faktanya, mereka membiarkan Anda membuat program Anda lebih cepat dan bahkan lebih dapat diandalkan. Semakin kompleks suatu program, semakin banyak utas dan berbagai bagian independen yang dimilikinya."

"Membagi program menjadi bagian-bagian yang independen (terpasang longgar) sangat bermanfaat."

"Bayangkan program Anda secara internal dibagi menjadi 100 utas. Tetapi Anda hanya memiliki prosesor inti ganda. Artinya, rata-rata 50 utas akan dieksekusi pada setiap inti."

"Jika Anda perlu meningkatkan kinerja program, Anda cukup membeli server prosesor ganda dan beberapa prosesor manis untuk itu. Ini bisa memberi Anda hingga 32 inti, menghasilkan peningkatan kinerja 2-20 kali lipat. Tergantung pada jumlahnya bagian yang benar-benar independen itu dibagi menjadi."

"Ini adalah salah satu alasan mengapa Java mendominasi dalam pengembangan perusahaan. Jika sebuah perusahaan memiliki program internal yang rumit yang ditulis oleh 20 pengembang, maka jauh lebih murah untuk membeli server lain daripada menggandakan kinerja program melalui pengoptimalan."

"Jadi itu masalahnya."

"Tapi! Setiap kali pengembang memutuskan untuk menggunakan utas lain, dia menyelesaikan satu masalah dan membuat dua. Semakin banyak utas tidak akan meningkatkan kinerja program tanpa henti."

"Pertama, program apa pun memiliki pekerjaan yang tidak dapat dipisahkan dan dijalankan secara paralel pada utas yang berbeda. Kedua, semua utas dijalankan pada prosesor yang sama. Semakin banyak utas yang Anda miliki, semakin lambat setiap utas bekerja."

"Dan, yang terpenting, utas sering kali menggunakan objek yang sama (biasanya disebut 'sumber daya bersama')."

"Misalnya, sebuah utas ingin menyimpan informasi tentang pekerjaan yang telah diselesaikannya dalam sebuah file. Jika ada beberapa utas seperti itu dan mereka ingin menulis informasi ke file yang sama, mereka akan saling mengganggu. Untuk mencegah file tersebut menjadi file kekacauan campur aduk, akses ke file terbatas, yaitu saat satu utas menggunakan file, yang lain menunggu."

"Ya, saya ingat. Anda melakukannya dengan menggunakan kata kunci tersinkronisasi ."

"Tepat sekali."

"Dan bagaimana jika utas menulis ke file yang berbeda?"

"Secara formal, ini adalah objek yang berbeda, tetapi mereka mungkin berada di hard drive yang sama."

"Jadi, apakah mungkin memparalelkan sesuatu di dalam prosesor?"

"Secara teknis, ya, tetapi segera setelah utas Anda membutuhkan sesuatu selain data yang dimilikinya, sesuatu itu mungkin sudah ditempati oleh utas lainnya—dan utas Anda harus menunggu."

"Nah, lalu apa yang harus saya lakukan? Bagaimana saya tahu apakah saya harus membuat banyak utas atau tidak?"

"Ini ditentukan langsung oleh arsitektur program Anda. Setiap proyek memiliki 'arsitek' sendiri yang mengetahui semua 'sumber daya' yang digunakan dalam program, mengetahui batasannya, dan seberapa baik/buruknya mereka diparalelkan."

"Dan jika aku tidak tahu?"

"Ada dua pilihan:"

a) bekerja di bawah pengawasan seseorang yang melakukannya

b) mendapatkan beberapa benjolan mencari tahu sendiri

"Saya robot: saya tidak mendapatkan gumpalan—hanya penyok."

"Nah, kalau begitu, dapatkan beberapa penyok."

"Begitu. Terima kasih. Anda mengklarifikasi beberapa hal yang sudah mulai saya pikirkan."