Nakabahaging mapagkukunan, salungatan, nakabahaging pag-access - 1

"Kumusta, Amigo! Gusto kong sabihin sa iyo ang tungkol sa pagbabahagi ng mga mapagkukunan. Sa iba't ibang mga thread, natural.

"Patuloy kong pinag-uusapan ang mga problemang nangyayari kapag nagtatrabaho sa maraming mga thread at kung paano lutasin ang mga ito. Hindi ito nangangahulugan na ang paggamit ng mga thread ay masama. Ang mga thread ay isang napakalakas na tool. Sa katunayan, hinahayaan ka nilang gawing mas mabilis ang iyong programa at kahit na mas maaasahan. Kung mas kumplikado ang isang programa, mas maraming mga thread at iba't ibang mga independiyenteng bahagi mayroon ito."

"Ang paghahati ng isang programa sa mga independiyenteng (maluwag na pinagsama) na mga bahagi ay lubhang kapaki-pakinabang."

"Isipin na ang iyong programa ay panloob na nahahati sa 100 mga thread. Ngunit mayroon ka lamang isang dual-core processor. Nangangahulugan ito na sa average na 50 mga thread ay isasagawa sa bawat core."

"Kung kailangan mong pataasin ang performance ng program, bibili ka lang ng dual-processor server at ilang sweet processor para dito. Maaari kang makakuha ng hanggang 32 cores, na magbubunga ng 2-20 beses na boost sa performance. Depende sa bilang ng tunay na independiyenteng mga bahagi ito ay nahahati."

"Ito ang isa sa mga dahilan kung bakit nangingibabaw ang Java sa pagpapaunlad ng negosyo. Kung ang isang kumpanya ay may isang kumplikadong panloob na programa na isinulat ng 20 mga developer, kung gayon ito ay mas murang bumili ng isa pang server kaysa sa doblehin ang pagganap ng programa sa pamamagitan ng pag-optimize."

"Kaya iyon ang tungkol sa lahat."

"Ngunit! Sa tuwing magpapasya ang isang developer na gumamit ng isa pang thread, nilulutas niya ang isang problema at lumilikha ng dalawa. Parami nang parami ang mga thread na hindi walang katapusang tataas ang pagganap ng programa."

"Una, ang anumang programa ay may trabaho na hindi maaaring hatiin at tumakbo nang magkatulad sa iba't ibang mga thread. Pangalawa, ang lahat ng mga thread ay isinasagawa sa parehong processor. Ang mas maraming mga thread na mayroon ka, mas mabagal ang bawat isa ay gumagana."

"At, ang pinakamahalaga, ang mga thread ay madalas na gumagamit ng parehong mga bagay (karaniwang tinatawag na 'nakabahaging mapagkukunan')."

"Halimbawa, ang isang thread ay gustong mag-save ng impormasyon tungkol sa trabaho na natapos nito sa isang file. Kung mayroong ilang mga ganoong thread at gusto nilang magsulat ng impormasyon sa parehong file, sila ay makagambala sa isa't isa. Upang maiwasan ang file na maging isang gumbled mess, limitado ang access sa file, ibig sabihin, habang ginagamit ng isang thread ang file, naghihintay ang iba."

"Oo, naalala ko. Ginagawa mo iyon gamit ang naka-synchronize na keyword."

"Tama."

"At paano kung ang mga thread ay sumusulat sa iba't ibang mga file?"

"Formally, ang mga ito ay iba't ibang mga bagay, ngunit sila ay marahil sa parehong hard drive."

"So, posible bang i-parallelize ang isang bagay sa loob ng processor?"

"Sa teknikal, oo, ngunit sa sandaling ang iyong thread ay nangangailangan ng isang bagay bukod sa data na mayroon ito, na maaaring may isang bagay na inookupahan ng isa pang thread-at ang iyong thread ay kailangang maghintay."

"Well, ano ang dapat kong gawin kung gayon? Paano ko malalaman kung dapat akong gumawa ng maraming mga thread o hindi?"

"Direkta itong tinutukoy ng arkitektura ng iyong programa. Ang bawat proyekto ay may sariling 'arkitekto' na nakakaalam ng lahat ng 'resources' na ginagamit sa programa, alam ang kanilang mga limitasyon, at kung gaano kahusay/hindi maganda ang mga ito parallelized."

"At kung hindi ko alam?"

"Mayroong dalawang pagpipilian:"

a) magtrabaho sa ilalim ng pangangasiwa ng isang taong gumagawa

b) kumuha ng ilang mga bukol sa pag-uunawa nito sa iyong sarili

"Ako ay isang robot: wala akong mga bukol-bukol lamang."

"Well, pagkatapos, kumuha ng ilang mga dents."

"I see. Salamat. Nilinaw mo ang ilang bagay na nasimulan ko nang ipagtaka."