Benang dan proses
Benang dan proses adalah istilah dalam sistem operasi, setiap aplikasi mempunyai proses tersendiri.
Sistem pengendalian akan memperuntukkan beberapa sumber pelaksanaan kepada proses ini, seperti ruang memori, dsb. Dalam proses itu, beberapa utas boleh dibuat, mereka berkongsi ruang memori ini dan dipanggil oleh sistem pengendalian untuk pengkomputeran selari.
Kita semua tahu bahawa sistem pengendalian moden seperti Mac OS X, UNIX, Linux, Windows, dll. boleh menjalankan pelbagai tugas pada masa yang sama. Sebagai contoh, anda melayari Internet menggunakan penyemak imbas, menaip kod dan menulis blog dalam Markdown Ini adalah multitasking Sekurang-kurangnya tiga tugasan dijalankan pada masa yang sama. Sudah tentu, terdapat banyak tugas yang berjalan secara senyap di latar belakang pada masa yang sama, tetapi ia tidak dipaparkan pada desktop. Untuk sistem pengendalian, tugas adalah satu proses Contohnya, membuka pelayar bermakna memulakan proses pelayar, membuka PyCharm bermakna memulakan proses PtCharm, dan membuka Markdown bermakna memulakan proses Md.
Walaupun CPU berbilang teras kini sangat popular. Walau bagaimanapun, memandangkan kod pelaksanaan CPU dilaksanakan secara berurutan, kita akan mempunyai soalan pada masa ini, bagaimanakah CPU teras tunggal melaksanakan pelbagai tugas?
Malah, sistem pengendalian bergilir-gilir untuk melaksanakan setiap tugasan secara bergilir-gilir untuk melaksanakan tugasan 0.01 saat, beralih ke tugasan 2, melaksanakan tugasan 2 selama 0.01 saat, kemudian beralih ke tugasan 3, melaksanakan selama 0.01 saat... dan. seterusnya. Di permukaan, setiap tugasan dilaksanakan secara bergilir-gilir Namun, kerana kelajuan pelaksanaan CPU sangat pantas, kita tidak dapat mengenalinya dengan mata kasar dan rasa, seolah-olah semua tugasan dilaksanakan pada masa yang sama.
Pelaksanaan berbilang tugas selari sebenar hanya boleh dicapai pada CPU berbilang teras Walau bagaimanapun, memandangkan bilangan tugasan jauh lebih banyak daripada bilangan teras CPU, sistem pengendalian secara automatik akan menjadualkan banyak tugas kepada setiap teras secara bergilir-gilir. perlaksanaan.
Sesetengah proses melakukan lebih daripada satu perkara, seperti penyemak imbas Kami boleh memainkan video, memainkan audio, membaca artikel, mengedit artikel, dll. Sebenarnya, ini semua adalah subtugas dalam proses penyemak imbas. Dalam proses, jika anda ingin melakukan berbilang perkara pada masa yang sama, anda perlu menjalankan berbilang "subtugas" pada masa yang sama Kami memanggil ini "subtugas" dalam urutan proses.
Memandangkan setiap proses perlu melakukan sekurang-kurangnya satu perkara, proses mempunyai sekurang-kurangnya satu utas. Sudah tentu, proses juga boleh mempunyai berbilang benang, dan berbilang benang boleh dilaksanakan pada masa yang sama Kaedah pelaksanaan berbilang benang adalah sama seperti berbilang proses Sistem pengendalian juga cepat bertukar antara berbilang benang, membenarkan setiap satu thread untuk Jalankan sementara secara bergilir-gilir dan ia akan kelihatan seperti ia dilaksanakan serentak.
Jadi apa yang perlu kita lakukan jika kita mahu melaksanakan berbilang tugas pada masa yang sama dalam Python?
Terdapat dua penyelesaian:
Satunya ialah memulakan berbilang proses Walaupun setiap proses hanya mempunyai satu urutan, berbilang proses boleh melaksanakan berbilang tugas bersama-sama.
Kaedah lain ialah memulakan proses dan memulakan berbilang utas dalam satu proses, supaya berbilang utas boleh melaksanakan berbilang tugas bersama-sama.
Sudah tentu terdapat kaedah ketiga, iaitu memulakan pelbagai proses, dan setiap proses memulakan beberapa utas, supaya lebih banyak tugas dapat dilaksanakan pada masa yang sama Sudah tentu, model ini lebih kompleks dan jarang digunakan dalam amalan.
Untuk meringkaskan, terdapat tiga cara untuk melaksanakan multitasking:
mod berbilang proses;
Mod berbilang benang;
Laksanakan berbilang tugas pada masa yang sama Biasanya tugasan itu tidak berkaitan, tetapi perlu berkomunikasi dan berkoordinasi antara satu sama lain Kadang-kadang, tugasan 1 mesti dijeda dan menunggu tugasan 2 selesai sebelum ia boleh terus dilaksanakan. tugasan 3 dan tugasan 4 tidak boleh Mereka dilaksanakan serentak, jadi kerumitan program berbilang proses dan berbilang benang adalah jauh lebih tinggi daripada program single-process, single-thread yang kami tulis sebelum ini.
Oleh kerana kerumitan yang tinggi dan kesukaran dalam penyahpepijatan, kami tidak mahu menulis multitasking melainkan terpaksa. Walau bagaimanapun, terdapat banyak masa apabila ia adalah mustahil untuk dilakukan tanpa multitasking. Fikirkan tentang menonton filem pada komputer Satu utas mesti memainkan video dan satu lagi benang memainkan audio Jika tidak, jika dilaksanakan dalam satu utas, video mesti dimainkan dahulu dan kemudian audio, atau audio mesti dimainkan terlebih dahulu. maka video ini jelas tidak mungkin.