"Hello, Amigo! Mayroon kaming bago at napakahirap na paksa. Paumanhin. Ito ay madalas na itinuturing na isa sa mga pinaka kumplikadong paksa hindi lamang sa Java, kundi pati na rin sa programming sa pangkalahatan. Ang pinag-uusapan ko ay tungkol sa multithreading . "

Isipin ang isang tipikal na laro sa computer, halimbawa, isang laro ng karera ng sasakyang pangalangaang. Lumilipad ka sa mga kalawakan ng kosmos, umiiwas sa mga meteorite at patrol cruiser. Dalawang dosenang iba pa ang nakikilahok sa iyo sa mga ilegal na karerang ito.

Sabihin nating nagpasya kang magsulat ng ganoong laro. Ang iyong programa ay kailangang subaybayan ang mga utos (keyboard input), ilipat ang mga spaceship, kalkulahin ang kanilang mga trajectory, tukuyin ang mga kahihinatnan ng anumang banggaan, at iguhit ang lahat ng ito sa screen ng user. Napakakomplikadong gawain nito.

Tandaan kung paano namin nalutas ang "problema ng mahusay na kumplikado" sa halimbawa tungkol sa lumalaking kumpanya ng pagpapadala?

Hinati namin ito sa mga independiyenteng departamento at mahigpit na tinukoy (standardized) kung paano sila makikipag-ugnayan.

"Ngunit ano ang gagawin natin kapag ang mga independiyenteng bahagi ay kailangang gumanap ng ilang gawain na kahanay sa iba pang mga bahagi?! Ang sagot sa tanong na ito ay mga thread ."

Subukang isipin ang isang programa bilang isang maliit na robot na tumatakbo sa paligid ng code at nagpapatupad ng mga utos . Una, nagsasagawa ito ng isang utos sa isang linya, pagkatapos ay lumipat sa susunod, at iba pa.

"Nakikita ko sa isip ko. Piece of cake!"

"Napakaganda. At ngayon isipin na mayroon kang ilan sa mga robot na ito. Habang pinangangasiwaan ng isa ang input ng user, ang isang segundo ay nag-a-update ng mga bagay batay sa input na iyon. Ang pangatlo ay nagpapatupad ng code sa pagpapakita ng mga bagay na ito sa screen. Ilang beses sa isang segundo, ang pang-apat ay nagsusuri kung may mga barkong nabangga at, kung mayroon, kinakalkula ang mga resulta ng banggaan."

Kaya, hindi lamang natin mahahati ang programa sa mga independiyenteng bahagi/mga bagay, ngunit gawin din ito upang magawa ng mga bahaging ito ang kanilang gawain nang hiwalay sa isa't isa. Ang mas kaunting pakikipag-ugnayan sa pagitan ng mga indibidwal na bahagi, hindi gaanong kumplikado ang programa.

Isipin na nagawa mong palitan ang manager ng isang script na nagpapadala ng mga liham . At hindi man lang nasabi ng ibang mga departamento ng kumpanya na nagkaroon ng pagbabago. Ang ganitong uri ng bagay ay nangyari noong ika-26 na siglo na may mahusay na mga resulta. Karamihan sa mga tagapamahala, at maging ang mga nangungunang executive, ay maaaring matagumpay na mapalitan ng isang script ng karaniwang kumplikado. Pagkatapos lamang na mamagitan ang «office plankton union» ay natapos ang malawakang tanggalan ng mga tagapamahala. Pero lumihis ako.

"Kawili-wili!"

"Hindi lamang maaaring magkaroon ng ilan sa mga "maliit na robot" na ito na nagpapatupad ng code, maaari rin silang makipag-usap sa isa't isa at mag-spill ng mga bagong robot."

"Mag-spawn ng mga bagong robot?"

"Oo, upang magsagawa ng mga bagong gawain. Minsan ito ay kapaki-pakinabang na lumikha ng isa pang robot (isa pang thread) upang magsagawa ng ilang aksyon kasabay ng kasalukuyang thread (robot)."

" Mukhang magandang bagay ito, ngunit hindi ko maisip kung saan ko ito gagamitin. "

At bakit natin sila tinatawag na " mga thread "?

"Isipin na ang bawat robot ay may iba't ibang kulay, at minarkahan ang mga utos gamit ang kulay nito habang ginagawa ang mga ito. Ang landas na tinatahak ng maliit na robot ay parang linyang iniwan ng lapis. Ang landas na ito ay sumasabay sa likod ng robot, tulad ng isang sinulid sa likod . isang karayom."

Ang bawat «maliit na robot» ay may isang gawain na nilikha upang maisagawa. Maaari mong isipin na ang isang thread ay ang hanay ng mga utos na isinagawa habang ginagawa ang gawaing ito.

Sabihin nating lumilipad ka sa isang spaceship para maghatid ng kargamento. Pagkatapos ay "maghatid ng kargamento" ang iyong gawain, at nasa kalagitnaan ka ng pagsasagawa nito. At ang iyong landas sa paglipad ay ang iyong thread. Masasabi nating ang bawat bagong gawain, ang bawat gawain ay hindi pa natatapos, ay may sariling thread (isang landas na kailangan pang tahakin).

"Sa madaling salita, mayroong isang gawain at isang "maliit na robot" na nagpapatupad nito. At ang isang thread ay ang landas na tinatahak ng robot habang tinatapos nito ang gawain nito?"

"Eksakto."

Iyan ay kung paano gumagana ang lahat sa loob-loob. Dahil ang computer ay mayroon lamang isang processor, maaari lamang itong magsagawa ng isang command sa isang pagkakataon. Kaya narito kung ano ang mangyayari: ang processor ay patuloy na lumilipat sa pagitan ng mga thread. Lumipat ito sa bagong thread, nagsasagawa ng ilang command, pagkatapos ay lumipat sa susunod na thread, nagsasagawa ng ilang command, at iba pa. Ngunit dahil ang paglipat sa pagitan ng mga thread ay nangyayari nang daan-daang beses bawat segundo, tila sa amin ang lahat ng mga thread ay tumatakbo nang sabay-sabay.

Multithreading - 1