"Hello, Amigo! Kami mempunyai topik baharu dan sangat sukar. Saya minta maaf. Ia sering dianggap sebagai salah satu topik paling kompleks bukan sahaja di Jawa, tetapi juga dalam pengaturcaraan secara umum. Saya bercakap tentang multithreading . "

Bayangkan permainan komputer biasa, contohnya, permainan perlumbaan kapal angkasa. Anda sedang terbang melalui hamparan kosmos, mengelak meteorit dan kapal penjelajah peronda. Dua dozen yang lain menyertai anda dalam perlumbaan haram ini.

Katakan anda memutuskan untuk menulis permainan sedemikian. Program anda perlu menjejaki arahan (input papan kekunci), menggerakkan kapal angkasa, mengira trajektori mereka, menentukan akibat daripada sebarang perlanggaran, dan melukis semua ini pada skrin pengguna. Ini adalah kerja yang sangat kompleks.

Ingat bagaimana kami menyelesaikan «masalah kerumitan yang hebat» dalam contoh tentang syarikat perkapalan yang semakin berkembang?

Kami membahagikannya kepada jabatan bebas dan menetapkan secara tegar (standard) cara mereka boleh berinteraksi.

"Tetapi apa yang kita lakukan apabila bahagian bebas perlu melakukan beberapa kerja selari dengan bahagian lain?! Jawapan kepada soalan ini ialah benang ."

Cuba bayangkan program sebagai robot kecil yang menjalankan kod dan melaksanakan arahan . Pertama, ia melaksanakan arahan pada satu baris, kemudian bergerak ke baris seterusnya, dan seterusnya.

"Saya nampak dalam fikiran saya. Sekeping kek!"

"Sangat bagus. Dan sekarang bayangkan anda mempunyai beberapa robot ini. Semasa seseorang mengendalikan input pengguna, satu saat sedang mengemas kini objek berdasarkan input itu. Satu pertiga melaksanakan kod untuk memaparkan objek ini pada skrin. Beberapa kali sesaat, yang keempat memeriksa sama ada mana-mana kapal telah berlanggar dan, jika ada, mengira hasil perlanggaran itu."

Oleh itu, kita bukan sahaja boleh membahagikan program kepada bahagian/objek bebas, tetapi juga menjadikannya supaya bahagian ini boleh melaksanakan kerjanya secara bebas antara satu sama lain. Semakin kurang interaksi antara bahagian individu, semakin kurang kompleks program.

Bayangkan anda boleh menggantikan pengurus dengan skrip yang menghantar surat . Dan jabatan syarikat yang lain tidak dapat memberitahu bahawa terdapat perubahan. Perkara seperti ini berlaku seawal abad ke-26 dengan keputusan yang cemerlang. Kebanyakan pengurus, dan juga eksekutif tertinggi, boleh berjaya digantikan dengan skrip kerumitan purata. Hanya selepas «kesatuan plankton pejabat» campur tangan barulah pemberhentian besar-besaran pengurus berakhir. Tetapi saya menyimpang.

"Sungguh menarik!"

"Bukan sahaja terdapat beberapa kod pelaksana "robot kecil" ini, mereka juga boleh berkomunikasi antara satu sama lain dan melahirkan robot baharu."

"Melahirkan robot baharu?"

"Ya, untuk melaksanakan tugas baharu. Kadangkala adalah berfaedah untuk mencipta robot lain (benang lain) untuk melakukan beberapa tindakan pada masa yang sama dengan benang semasa (robot)."

" Ini kedengaran seperti perkara yang baik, tetapi saya tidak dapat memikirkan di mana saya akan menggunakannya. "

Dan mengapa kita memanggilnya « benang »?

"Bayangkan bahawa setiap robot adalah warna yang berbeza, dan tandakan arahan dengan warnanya semasa ia melaksanakannya. Laluan yang diambil oleh robot kecil adalah seperti garisan yang ditinggalkan oleh pensel. Laluan ini bertali di belakang robot, seperti benang di belakang jarum."

Setiap «robot kecil» mempunyai tugas yang dicipta untuk dilaksanakan. Anda boleh menganggap benang ialah set arahan yang dilaksanakan semasa melaksanakan tugas ini.

Katakan anda terbang dengan kapal angkasa untuk menghantar kargo. Kemudian «menghantar kargo» ialah tugas anda, dan anda sedang melaksanakannya. Dan laluan penerbangan anda adalah urutan anda. Kita boleh katakan bahawa setiap tugasan baharu, setiap tugasan yang belum selesai, mempunyai benangnya sendiri (laluan yang masih perlu dilalui).

"Dalam erti kata lain, terdapat tugas dan "robot kecil" yang melaksanakannya. Dan benang hanyalah laluan yang diambil oleh robot semasa ia menyelesaikan tugasnya?"

"Tepat sekali."

Begitulah semuanya berfungsi jauh di dalam. Oleh kerana komputer hanya mempunyai satu pemproses, ia hanya boleh melaksanakan satu arahan pada satu masa. Jadi inilah yang berlaku: pemproses sentiasa bertukar antara benang. Ia bertukar kepada utas baharu, melaksanakan beberapa arahan, kemudian beralih ke utas seterusnya, melaksanakan beberapa arahan, dan seterusnya. Tetapi memandangkan pertukaran antara benang berlaku ratusan kali sesaat, nampaknya semua benang berjalan serentak.

Multithreading - 1