Perbezaan antara program PHP menyekat dan tidak menyekat ialah: sebelum keputusan panggilan menyekat dikembalikan, urutan semasa akan digantung dan pemanggil tidak akan terus melaksanakan sebelum keputusan panggilan tidak menyekat; dikembalikan, panggilan tidak akan Menyekat urutan semasa dan meneruskan pelaksanaan.
Persekitaran pengendalian artikel ini: sistem Windows 10, PHP versi 7.1, komputer Dell G3.
Menyekat dan tidak menyekat memfokuskan pada status program semasa ia menunggu hasil panggilan (mesej, nilai pulangan ).
Panggilan menyekat bermakna urutan semasa akan digantung sebelum keputusan panggilan dikembalikan. Benang panggilan akan kembali hanya selepas mendapat keputusan.
Panggilan tidak menyekat bermakna panggilan tidak akan menyekat urutan semasa sehingga keputusan tidak dapat diperolehi dengan segera.
1.php concurrency blocking
Untuk PHP, concurrency adalah masalah Kami sering menghadapi beberapa pertanyaan di tempat kerja untuk menentukan sama ada data itu wujud sebelum menulis pangkalan data jika terdapat keselarasan, ia akan menyebabkan data ditulis berulang kali, dan penghakiman anda akan menjadi palsu. Jadi dengan menyekat, kita perlu melaksanakan permintaan satu demi satu.
Pengenalan ringkas:
1, buka atau buat fail lock.txt dalam mod baca dan tulis
2 Fail .txt. Selepas kunci berjaya, anda boleh meneruskan ke langkah seterusnya "memproses data produk pesanan"
3 Selepas memproses data, anda mesti "melepaskan kunci" dan menutup fail yang terbuka
Nota: kepada fail Selepas "kunci eksklusif", jika tiada "kunci pelepas" di dalamnya, akan ada keadaan yang sangat tersekat
public function index(){ $fp = fopen("lock.txt", "w+"); if(flock($fp,LOCK_EX)) { $find=Db::name('user')->where('username','name2')->find(); if($find){ $data['username']='name3'; $data['password']=''; $data['password_m']=''; Db::name('user')->insert($data); }else{ $data['username']='name2'; $data['password']=''; $data['password_m']=''; Db::name('user')->insert($data); } flock($fp,LOCK_UN); } fclose($fp); return 'success'; }
Nota: Ia boleh dilaksanakan untuk yang kecil concurrency, dan prestasi tidak akan memberi impak yang besar. Adalah lebih baik jika konkurensi kurang daripada 500. Jika terlalu tinggi, adalah disyorkan untuk menggunakan mod giliran.
Mod tidak menyekat 2.php
Mod tidak menyekat biasanya digunakan dalam atur cara php untuk memanggil antara muka api pihak ketiga, atau atur cara yang tidak perlu tunggu keputusan.
Berikan contoh mudah. Untuk menghantar e-mel, anda perlu menghantarnya kepada semua bos anda, jadi anda perlu menghantar semuanya sekali Mungkin anda perlu menulis satu gelung, jadi kaedah menghantar e-mel dalam gelung ini memerlukan masa pelaksanaan, dan anda perlu mendapatkannya. kembalikan nilai dan laksanakannya pada kali seterusnya Gelung, kali ini terkumpul dalam urutan, dan masa terakhir akan menjadi sangat lama,
Kemudian ini dipanggil menyekat, dan apa yang kita sentiasa mahukan adalah menyerahkan masa lalu, tanpa menunggu. untuk data dikembalikan, dan anda akan gelung Hanya jalankan sekali, maka apa yang kita mahu ialah mod tidak menyekat. Untuk situasi seperti ini, PHP tidak mempunyai apa-apa fungsi yang baik untuk mengendalikannya, jadi apa yang paling kami lakukan adalah untuk beratur semasa menghantar e-mel,
dilaksanakan mengikut baris gilir mod masih digunakan. Tetapi masa pelaksanaan permintaan kami akan dimampatkan dengan sangat singkat. Masa yang paling biasa digunakan ialah memanggil antara muka API dan anda tidak mengambil berat tentang nilai pulangan pada masa ini.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Apakah perbezaan antara menyekat dan tidak menyekat program PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!