ajax bukan berbilang benang, tetapi berbenang tunggal, kerana JavaScript adalah berbenang tunggal, dan Ajax tergolong dalam kategori JavaScript, jadi Ajax adalah berbenang tunggal. Sebab mengapa Ajax boleh digunakan untuk mencapai multi-threading bergantung pada pelayan web Pelayan menggunakan multi-threading untuk memproses permintaan.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.
Adakah Ajax benang tunggal atau berbilang benang?
Pertama sekali, mari kita jelaskan: Ajax adalah single-thread, kerana JavaScript adalah single-thread, dan Ajax tergolong dalam kategori JavaScript, jadi Ajax adalah single -benang. Sebab mengapa kita boleh menggunakan Ajax untuk mencapai berbilang benang bergantung pada pelayan web Pelayan menggunakan berbilang benang untuk memproses permintaan.
Kemudian mari kita jelaskan: penyemak imbas adalah berbilang proses. Seperti yang ditunjukkan dalam rajah, setiap kali halaman tab dibuka dalam Google Chrome, akan ada proses kanak-kanak.
Oleh kerana JS berjalan dalam penyemak imbas, ia adalah satu utas Setiap tetingkap mempunyai satu utas kerana ia adalah satu utas, hanya terdapat satu utas pada a momen tertentu Kod boleh dilaksanakan dan menyekat kod lain.
Ajax tak segerak?
Permintaan Ajax sememangnya tidak segerak Enjin js melaksanakan kod tak segerak ini kerana terdapat baris gilir mesej dan gelung acara ini diminta oleh penyemak imbas untuk membuka urutan baharu. Banyak gelagat dalam penyemak imbas adalah tidak segerak Apabila peristiwa tak segerak berlaku, ia memasuki baris gilir acara Penyemak imbas mempunyai gelung mesej besar dalaman, Gelung Acara, yang mengundi baris gilir acara besar dan memproses acara ini sahaja selepas pemprosesan sebelumnya selesai dan ia melahu, dan enjin JavaScript sentiasa menjalankan fungsi panggil balik dalam satu utas.
Kesimpulan:
Permintaan Ajax sememangnya tidak segerak Permintaan ini dibuat oleh penyemak imbas untuk membuka permintaan rangkaian baharu Apabila acara dipanggil semula, Acara gelung diletakkan dalam satu barisan acara menunggu untuk diproses.
Baris gilir mesej mengandungi fungsi panggil balik yang kami tambah semasa mendaftarkan tugas tak segerak Selepas utas utama memulakan permintaan AJAX, ia akan terus melaksanakan kod lain. Benang AJAX bertanggungjawab untuk meminta url Selepas mendapat respons, ia akan merangkumkan respons ke dalam objek JavaScript dan kemudian membina mesej:
// ajax请求 $.ajax(url, function(resp) { console.log('我是响应:', resp); }); // 消息队列中的消息就长这个样子 var message = function () { callbackFn(response); } // 其中的callbackFn就是前面代码中得到成功响应时的回调函数。
Selepas utas utama selesai melaksanakan semua kod dalam gelung semasa, ia akan Apabila baris gilir mesej mengeluarkan mesej dan melaksanakannya, pemberitahuan utas utama daripada utas kerja ke utas utama selesai, dan fungsi panggil balik dilaksanakan. Jika utas utama tidak menyediakan fungsi panggil balik pada mulanya, utas AJAX tidak perlu memberitahu utas utama selepas menerima respons HTTP, dan tidak perlu meletakkan mesej dalam baris gilir mesej. Antaranya, fungsi panggil balik proses tak segerak tidak boleh dilaksanakan dalam pusingan semasa gelung peristiwa.
[Cadangan tutorial berkaitan: Tutorial video AJAX]
Atas ialah kandungan terperinci Adakah ajax berbilang benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!