objective-c - 线程同步和异步的区别?IOS中如何实现多线程的同步?
PHP中文网
PHP中文网 2017-04-28 09:05:18
0
3
539

这个关于线程的问题怎么实现?

PHP中文网
PHP中文网

认证0级讲师

membalas semua(3)
小葫芦

Izinkan saya memberitahu anda pemahaman saya sendiri. Saya tidak memahaminya secara mendalam.

Penyegerakan benang berlaku di bawah berbilang benang mengakses sumber yang sama pada masa yang sama Untuk memastikan akses yang selamat dan cekap, adalah perlu untuk menyelesaikan satu siri masalah yang disebabkan oleh akses segerak.
Sebagai contoh, dua orang mengambil epal dari bakul Jika seorang mengambilnya dan kemudian membiarkan yang lain mengambilnya, tidak akan ada masalah, tetapi kecekapannya tidak akan tinggi. (totalTime = timeOfA + timeOfB)
Jika anda membiarkan mereka mengambilnya pada masa yang sama, anda mengambil satu dan saya mengambil satu, ini akan menjadi lebih cekap, tetapi akan ada masalah Jika kedua-dua orang mengambil epal, siapa perlu mendapatkannya? Pada masa ini, anda boleh Terdapat beberapa kaedah Apabila A mengambil epal, B menunggu dahulu, dan menunggu sehingga A mendapat epal sebelum B mengambilnya. Atau A hanya boleh mengambil apa yang di sebelah A, dan B hanya boleh mengambil apa yang di sebelah B. Ini akan menyelesaikan masalah.
Kaedah paling penting pada iOS ialah menguncinya semasa akses dan membuka kuncinya selepas akses selesai. Mengenai apa yang perlu ditambah dan bagaimana untuk menguncinya, banyak maklumat di Internet adalah sangat terperinci.

为情所困

同步 异步 线程同步, adalah konsep yang berbeza

Contoh mengambil rakan sekelas dari tingkat atas

Anda mengambil epal, dan kemudian saya mengambil epal Ini dipanggil 同步 pelaksanaan
Anda dan saya mengambil epal pada masa yang sama. Ini dipanggil dua utas 异步 pelaksanaan laksanakan 异步 di sini, kami menggunakan 多线程 bermakna anda dan saya masing-masing tergolong dalam satu benang
Kemudian akan ada masalah, bagaimana jika anda dan saya mencapai epal yang sama? Pada masa ini, anda dan saya perlu 线程同步, sebagai contoh: sesiapa yang melihat bakul terlebih dahulu akan mengunci bakul, biarkan orang lain menunggu, dan membuka kuncinya selepas mengambilnya

左手右手慢动作

Ramai orang berpendapat bahawa asynchronous bermaksud multi-threading. Terdapat perbezaan antara asynchronous dan multi-threading.

Benang ialah kod, kod yang perlu dijalankan oleh CPU Menjalankan dua keping kod benang bersama-sama memberi orang perasaan tidak disekat. Tetapi ia masih kod. CPU masih menunggu di sana.

Asynchronous terutamanya untuk io, fail io dan permintaan rangkaian io Anda tidak mahu io segerak menyekat proses, jadi terdapat kaedah tak segerak untuk meningkatkan responsif memerlukan sistem pengendalian untuk melanggan delegasi acara fungsi penutupan. Perkara yang sama tidak boleh dikatakan untuk multi-threading.

Jika anda tahu sedikit tentang perkakasan, anda boleh merasai gangguan itu.

Ambil epal yang dibincangkan semua orang sebagai contoh...
Asynchronous bermaksud, anda beritahu komputer, dapatkan saya sebiji epal.
Komputer akan menggunakan perkakasan Apple untuk bertindak balas kepada fungsi ini. Adakah ia mempunyai kaitan dengan CPU? Tiada lagi. Ia tidak akan melengahkan CPU.
Apabila Apple meminta daripada rangkaian, yang mengambil Apple ialah kad rangkaian

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan