Megosztott erőforrások, konfliktusok, megosztott hozzáférés - 1

"Szia, Amigo! Az erőforrások megosztásáról szeretnék beszélni. Természetesen különböző szálakon keresztül.

"Folyamatosan azokról a problémákról beszélek, amelyek több szállal dolgozva, és azok megoldásáról beszélek. Ez nem jelenti azt, hogy a szálak használata rossz. A szálak nagyon hatékony eszközök. Valójában gyorsabbá és egyenletesebbé teszik a programot. megbízhatóbb. Minél összetettebb egy program, annál több szál és különböző független rész van benne."

"A program független (lazán összekapcsolt) részekre bontása nagyon előnyös."

"Képzeld el, hogy a programod belsőleg 100 szálra van felosztva. De csak kétmagos processzorod van. Ez azt jelenti, hogy átlagosan 50 szál kerül végrehajtásra minden magon."

"Ha növelni kell a program teljesítményét, vásároljon hozzá egy kétprocesszoros szervert és néhány édes processzort. Ezzel akár 32 magot is kaphat, ami 2-20-szoros teljesítménynövekedést eredményez. A számtól függően valóban független részekre oszlik."

"Ez az egyik oka annak, hogy a Java dominál a vállalati fejlesztésekben. Ha egy cégnek van egy komplex belső programja, amit 20 fejlesztő írt, akkor sokkal olcsóbb egy másik szervert vásárolni, mint a program teljesítményét optimalizálással megduplázni."

– Szóval erről van szó.

"De! Valahányszor egy fejlesztő úgy dönt, hogy másik szálat használ, megold egy problémát, és kettőt hoz létre. Egyre több szál nem fogja vég nélkül növelni a program teljesítményét."

"Először is, minden programnak van olyan munkája, amelyet nem lehet szétbontani és párhuzamosan futtatni különböző szálakon. Másodszor, az összes szál ugyanazon a processzoron fut. Minél több szál van, annál lassabban működik mindegyik."

"És ami a legfontosabb, a szálak gyakran ugyanazokat az objektumokat használják (általában "megosztott erőforrásoknak" nevezik)."

"Például egy szál egy fájlba akarja menteni az elvégzett munkáról szóló információkat. Ha több ilyen szál van, és ugyanabba a fájlba akarnak információkat írni, akkor zavarni fogják egymást. Megakadályozzák, hogy a fájl egy zagyva, a fájlhoz való hozzáférés korlátozott, azaz amíg az egyik szál használja a fájlt, a többiek várnak."

"Igen, emlékszem. Ezt a szinkronizált kulcsszóval csinálod ."

– Pontosan helyesen.

"És mi van akkor, ha a szálak más-más fájlba írnak?"

"Formailag ezek különböző objektumok, de valószínűleg ugyanazon a merevlemezen vannak."

"Szóval tényleg lehet párhuzamosítani valamit a processzoron belül?"

"Technikailag igen, de amint az Ön szálának szüksége van valamire a birtokában lévő adatokon kívül, azt a valamit már elfoglalhatja egy másik szál – és a szálnak várnia kell."

"Nos, akkor mit tegyek? Honnan tudhatom, hogy sok szálat kell-e csinálni vagy sem?"

"Ezt közvetlenül a program architektúrája határozza meg. Minden projektnek megvan a saját "építésze", aki ismeri a programban használt összes "erőforrást", ismeri azok korlátait, és azt, hogy mennyire jól/rosszul vannak párhuzamosítva."

– És ha nem tudom?

"Két lehetőség van:"

a) olyan személy felügyelete alatt dolgozzon, aki ezt teszi

b) kap néhány csomót kitalálni egyedül

"Robot vagyok: nem kapok csomókat, csak horpadásokat."

– Nos, akkor csinálj néhány horpadást.

– Értem. Köszönöm. Tisztáztál néhány dolgot, amelyeken már elkezdtem tűnődni.