"Halo, Amigo! Kita duwe topik anyar lan angel banget. Nyuwun pangapunten. Iki asring dianggep minangka salah sawijining topik sing paling rumit ora mung ing Jawa, nanging uga ing program umum. Aku ngomong babagan multithreading . "

Mbayangno game komputer khas, contone, game racing spaceship. Sampeyan lagi mabur liwat expanses saka kosmos, dodging meteorit lan cruisers patroli. Rong lusin liyane melu sampeyan ing balapan ilegal iki.

Ayo dadi ngomong sampeyan arep kanggo nulis game kuwi. Program sampeyan kudu nglacak printah (input keyboard), mindhah kapal angkasa, ngetung lintasan, nemtokake akibat saka tabrakan, lan gambar kabeh iki ing layar pangguna. Iki minangka karya sing rumit banget.

Elinga carane kita ditanggulangi «masalah gedhe kerumitan» ing conto babagan perusahaan kapal akeh?

We dipérang dadi departemen sawijining lan rigidly kasebut (standar) carane padha bisa sesambungan.

"Nanging apa sing kudu ditindakake nalika bagean independen kudu nindakake sawetara karya sing sejajar karo bagean liyane?! Jawaban kanggo pitakonan iki yaiku benang ."

Coba mbayangno program minangka robot cilik sing ngubengi kode lan nglakokake perintah . Pisanan, nglakokake perintah ing siji baris, banjur pindhah menyang sabanjure, lan sateruse.

"Aku bisa ndeleng ing pikiranku. Piece saka jajan!"

"Apik banget. Lan saiki mbayangno yen sampeyan duwe sawetara robot iki. Nalika siji nangani input pangguna, liyane nganyari obyek adhedhasar input kasebut. Katelu nglakokake kode kanggo nampilake obyek kasebut ing layar. Kaping pirang-pirang detik, kaping papat mriksa manawa ana kapal sing tabrakan lan, yen ana, ngitung asil tabrakan."

Mangkono, kita ora mung bisa mbagi program dadi bagean / obyek sing independen, nanging uga nggawe supaya bagean kasebut bisa nindakake karya kanthi mandiri. Kurang interaksi antarane bagean individu, program sing kurang kompleks.

Bayangake sampeyan bisa ngganti manajer nganggo skrip sing ngirim layang . Lan departemen perusahaan liyane ora bisa ngomong yen ana owah-owahan. Iki kedadeyan ing awal abad kaping 26 kanthi asil sing apik banget. Umume manajer, lan malah eksekutif paling dhuwur, bisa diganti kanthi skrip kanthi kerumitan rata-rata. Mung sawise «serikat plankton kantor» campur tangan, PHK massal manajer rampung. Nanging aku digress.

"Carane menarik!"

"Ora mung ana sawetara "robot cilik" sing ngeksekusi kode, uga bisa komunikasi karo siji liyane lan ngasilake robot anyar."

"Ngetokne robot anyar?"

"Ya, kanggo nindakake tugas anyar. Kadang iku mupangati kanggo nggawe robot liyane (utas liyane) kanggo nindakake sawetara tumindak ing wektu sing padha karo thread saiki (robot)."

" Iki muni apik, nanging aku ora bisa mikir ing ngendi aku bakal nggunakake. "

Lan kenapa kita nyebut dheweke " utas "?

"Bayangake manawa saben robot duwe warna sing beda-beda, lan menehi tandha printah kanthi warna nalika nindakake. Path sing ditindakake dening robot cilik kaya garis sing ditinggalake potlot. Jalur iki ana ing mburi robot, kaya benang ing mburi . jarum."

Saben «robot cilik» duwe tugas sing digawe kanggo nindakake. Sampeyan bisa uga mikir yen thread minangka set perintah sing ditindakake nalika nindakake tugas iki.

Contone, sampeyan lagi mabur ing pesawat ruang angkasa kanggo ngirim kargo. Banjur «ngirim kargo» tugas sampeyan, lan sampeyan lagi ing tengah nindakake. Lan jalur penerbangan sampeyan minangka benang sampeyan. Kita bisa ujar manawa saben tugas anyar, saben tugas sing durung rampung, duwe benang dhewe (dalan sing isih kudu dilewati).

"Ing tembung liyane, ana tugas lan "robot cilik" sing nglakokake. Lan benang mung dalan sing ditindakake dening robot nalika ngrampungake tugase?"

"Pancen."

Mangkono kabeh bisa digunakake ing jero. Amarga komputer mung nduweni siji prosesor, mung bisa nglakokake siji printah ing siji wektu. Mangkene apa sing kedadeyan: prosesor terus-terusan ngalih ing antarane benang. Ngalih menyang utas anyar, nglakokaké sawetara prentah, banjur pindhah menyang utas sabanjuré, nglakokaké sawetara prentah, lan saterusé. Nanging wiwit ngoper antarane Utas ana atusan kaping saben detik, misale jek kita kabeh Utas mlaku bebarengan.

Multithreading - 1