1. Pendahuluan
Baru-baru ini, saya mewawancarai dan meninjau multi-threading lagi, berharap untuk memperdalam pemahaman saya tentang multi-threading.
1. Apa itu proses?
1). Untuk memahami utas, pertama -tama kita harus memahami prosesnya. Dalam istilah Layman, suatu proses adalah aplikasi yang berjalan dalam sistem.
2). Setiap utas ada secara mandiri dan berjalan dalam ruang memori yang berdedikasi dan dilindungi.
3). Misalnya, saat membuka sistem QQ atau XCODE, dua proses akan dibuka secara terpisah seperti yang ditunjukkan pada gambar:
4) Kita dapat melihat proses yang diaktifkan dalam sistem Mac melalui "monitor aktivitas".
2. Apa itu utas?
1). Suatu proses harus memiliki utas untuk menjalankan tugas, yaitu, suatu proses harus memiliki setidaknya satu utas.
2). Utas adalah unit eksekusi dasar dari suatu proses, dan semua tugas proses (program) dijalankan di utas.
3). Misalnya, menggunakan Kugou untuk memutar musik dan menggunakan Thunder untuk mengunduh film semua perlu berjalan di utas seperti yang ditunjukkan pada gambar:
3. Apa itu Serial Thread?
1). Utas dieksekusi secara serial (dieksekusi secara berurutan), yang berarti bahwa utas hanya dapat menjalankan satu tugas dalam waktu yang bersamaan.
2). Diagram eksekusi serial, seperti satu utas mengunduh 3 file (file a, b, c)
4. Apa itu multi-threading?
1). Beberapa utas dapat dibuka dalam suatu proses, dan setiap utas dapat melakukan tugas yang berbeda secara bersamaan (secara bersamaan).
2). Daftar Hubungan Similar: Proses ----> Lokakarya; Thread ----> Pekerja lokakarya
3). Diagram multi-threaded, seperti membuka 3 utas secara bersamaan untuk mengunduh 3 file (file a, b, c)
5. Prinsip multithreading
1). Pada saat yang sama, CPU hanya dapat menjalankan satu utas, dan hanya satu utas yang berfungsi (eksekusi).
2). Eksekusi multi-threaded concurrent (simultan) sebenarnya adalah jadwal CPU dengan cepat (sakelar) antara beberapa utas.
3). Jika CPU menjadwalkan utas dengan cukup cepat, itu akan menyebabkan ilusi eksekusi bersamaan multi-thread.
4). Kerugian multithreading:
1. Setiap utas akan menempati sejumlah ruang memori (secara default: utas utama menempati 1MB dan utas anak menempati 512kb).
Jika terlalu banyak utas dihidupkan, itu akan menempati banyak ruang memori, yang akan menyebabkan kinerja program terdegradasi.
2. Semakin banyak utas, semakin besar overhead utas penjadwalan CPU (mirip dengan semakin banyak pekerja pabrik, semakin besar overhead pabrik).
3. Membuat pemrograman lebih kompleks: seperti komunikasi data multi-threaded dan berbagi data antara beberapa utas.
5). Keuntungan dari multithreading:
1. Dapat secara tepat meningkatkan efisiensi eksekusi program.
2. Dapat meningkatkan pemanfaatan sumber daya secara tepat (CPU dan pemanfaatan memori)
6. Apa utas utamanya?
1) .Aringan akan dibuka secara default setelah program iOS dibuka. Utas ini disebut "utas utama" atau "utas UI".
2). Fungsi utama utas utama:
1. Tampilkan/Segarkan Antarmuka UI
2. Tangani acara UI (seperti acara klik, acara gulir, acara seret, dll.)
3). Catatan di utas utama:
1. Jangan menempatkan operasi yang memakan waktu di utas utama. Operasi yang memakan waktu di utas utama akan menyebabkan lag program.
7. Demo operasi yang memakan waktu
1) Demo berjalan langsung di utas utama
-(void) touchesbegan: (nsset <uitouch *> *) menyentuh withevent: (uevent *) event {// Dapatkan metode eksekusi saat ini dan utas saat ini // nomor == utas utama // angka! = Utas anak lainnya, dan utas sekunder nslog (@"%s -----%@, __ persimpangan __ __ soal __ Penyebab Operasi UI Menjadi gagap [operasi lama sendiri];}#operasi yang memakan waktu-waktu pragma- (void) operasi operasi {for (int i =; i <; i ++) {nslog (@"%d", i);}}2) Demo berjalan di benang anak
-(void) touchesbegan: (nsset <uitouch *> *) menyentuh withevent: (uevent *) event {// Dapatkan metode eksekusi saat ini dan utas saat ini // nomor == utas utama // nomor! = Utas anak-anak, dan nslog-nslog (@"%s ---%@, __, __ coadsum nslog (@"%s ---%@, __ caC-coadsum __ __ Operasi di utas anak untuk dieksekusi tanpa mempengaruhi operasi UI [mandiri performselectorInbackground: @selector (operasi lama) withObject: nil];}#pragma mark-consuming operasi- (void) Lama operasi {untuk (int i =; i <; i ++) {nslog (@"%d", i);Konten di atas adalah pengetahuan multi-threading dari iOS yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda!