Paylaşılan kaynaklar, çakışmalar, paylaşılan erişim - 1

"Merhaba Amigo! Sana kaynakları paylaşmaktan bahsetmek istiyorum. Doğal olarak farklı başlıklar arasında.

"Birden fazla iş parçacığı ile çalışırken ortaya çıkan sorunlardan ve bunların nasıl çözüleceğinden bahsediyorum. Bu, iş parçacığı kullanmanın kötü olduğu anlamına gelmez. İş parçacıkları çok güçlü bir araçtır. Aslında, programınızı daha hızlı ve hatta daha güvenilir. Bir program ne kadar karmaşıksa, o kadar çok iş parçacığı ve çeşitli bağımsız parçalara sahiptir."

"Bir programı bağımsız (gevşek bağlı) parçalara bölmek çok faydalıdır."

"Programınızın dahili olarak 100 iş parçacığına bölündüğünü hayal edin. Ancak yalnızca çift çekirdekli bir işlemciniz var. Bu, her çekirdekte ortalama 50 iş parçacığının yürütüleceği anlamına gelir."

"Programın performansını artırmanız gerekiyorsa, bunun için sadece çift işlemcili bir sunucu ve birkaç tatlı işlemci satın alırsınız. Bu size 32 çekirdeğe kadar ulaşabilir ve performansta 2-20 kat artış sağlar. Sayıya bağlı olarak gerçekten bağımsız kısımlara bölünmüştür."

"Java'nın kurumsal geliştirmede baskın olmasının nedenlerinden biri de budur. Bir şirketin 20 geliştirici tarafından yazılmış karmaşık bir dahili programı varsa, optimizasyon yoluyla programın performansını ikiye katlamaktansa başka bir sunucu satın almak çok daha ucuzdur."

"Demek her şey bundan ibaret."

"Ama! Ne zaman bir geliştirici başka bir iş parçacığı kullanmaya karar verse, bir sorunu çözer ve iki tane oluşturur. Giderek daha fazla iş parçacığı programın performansını sonsuza dek artırmaz."

"Birincisi, herhangi bir programın parçalara ayrılamayan ve farklı iş parçacıklarında paralel olarak çalışamayan işleri vardır. İkincisi, tüm iş parçacıkları aynı işlemcide yürütülür. Ne kadar çok iş parçacığınız varsa, her biri o kadar yavaş çalışır."

"Ve en önemlisi, ileti dizileri genellikle aynı nesneleri kullanır (genellikle 'paylaşılan kaynaklar' olarak adlandırılır).

"Örneğin bir thread yaptığı işle ilgili bilgiyi bir dosyaya kaydetmek ister. Eğer bu tür birkaç thread varsa ve aynı dosyaya bilgi yazmak isterlerse birbirlerini engellerler. karışık karışıklık, dosyaya erişim sınırlıdır, yani bir iş parçacığı dosyayı kullanırken diğerleri bekler."

"Evet, hatırlıyorum. Bunu, senkronize edilmiş anahtar kelimeyi kullanarak yapıyorsun ."

"Kesinlikle doğru."

"Ya ileti dizileri farklı dosyalara yazıyorsa?"

"Resmi olarak bunlar farklı nesneler ama muhtemelen aynı sabit diskteler."

"Peki, işlemci içinde bir şeyi paralel hale getirmek gerçekten mümkün mü?"

"Teknik olarak evet, ama iş parçacığınız sahip olduğu veri dışında bir şeye ihtiyaç duyar duymaz, bir şey zaten başka bir iş parçacığı tarafından işgal edilmiş olabilir ve iş parçacığınız beklemek zorunda kalır."

"Peki, o zaman ne yapmalıyım? Çok fazla konu açıp açmamam gerektiğini nasıl bilebilirim?"

"Bu, doğrudan programınızın mimarisi tarafından belirlenir. Her projenin, programda kullanılan tüm 'kaynakları' bilen, sınırlamalarını ve ne kadar iyi/kötü paralelleştirildiklerini bilen kendi 'mimar'ı vardır."

"Ya bilmiyorsam?"

"İki seçenek var:"

a) yapan birinin gözetiminde çalışmak

b) kendi başınıza çözerek bazı topaklar alın

"Ben bir robotum: Yumrularım yok, sadece eziklerim var."

"Pekala, o zaman, biraz ezik al."

"Anlıyorum. Teşekkürler. Zaten merak etmeye başladığım bazı şeylere açıklık getirdin."