Rumah > Artikel > hujung hadapan web > Adakah javascript berulir tunggal?
JavaScript adalah satu benang. Walaupun JavaScript mempunyai berbilang teras, ia hanya boleh menjalankan tugas pada satu utas yang dipanggil utas utama sebagai bahasa skrip penyemak imbas, tujuan utama JavaScript adalah untuk berinteraksi dengan pengguna dan mengendalikan DOM. ia akan membawa banyak masalah penyegerakan yang kompleks.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi JavaScript 1.8.5, komputer Dell G3.
Sebagai bahasa skrip penyemak imbas, tujuan utama JavaScript adalah untuk berinteraksi dengan pengguna dan memanipulasi DOM. Ini menentukan bahawa ia hanya boleh menjadi satu-benang, jika tidak, ia akan menyebabkan masalah penyegerakan yang sangat kompleks.
Urutan pada asasnya ialah satu proses yang boleh digunakan oleh atur cara untuk menyelesaikan tugasan. Setiap urutan hanya boleh melaksanakan satu tugasan pada satu masa:
Task A --> Task B --> Task C
Setiap tugasan akan dijalankan secara berurutan; satu tugasan mesti diselesaikan sebelum tugasan seterusnya boleh dimulakan.
Seperti yang dinyatakan sebelum ini, banyak komputer kini mempunyai berbilang teras dan oleh itu boleh melakukan berbilang operasi sekaligus. Bahasa pengaturcaraan yang boleh menyokong berbilang benang boleh menggunakan berbilang teras untuk menyelesaikan berbilang tugas serentak:
Thread 1: Task A --> Task B Thread 2: Task C --> Task D
Secara tradisinya, JavaScript adalah satu-benang. Walaupun dengan berbilang teras, anda hanya boleh membuatnya menjalankan tugas pada satu utas yang dipanggil utas utama. Contoh kami di atas berjalan seperti ini:
Main thread: Render circles to canvas --> Display alert()
Lama kelamaan, JavaScript memperoleh beberapa alatan untuk menyelesaikan masalah sedemikian. Pekerja web membenarkan anda menghantar beberapa pemprosesan JavaScript ke urutan berasingan (dipanggil pekerja) supaya anda boleh menjalankan berbilang blok JavaScript pada masa yang sama. Biasanya anda akan menggunakan pekerja untuk menjalankan proses mahal pada utas utama supaya ia tidak menyekat interaksi pengguna.
Main thread: Task A --> Task C Worker thread: Expensive task B
Dengan mengambil kira perkara ini, buka konsol JavaScript penyemak imbas anda sekali lagi dan lihat pada simple-sync-worker.html (untuk melihatnya berjalan dalam masa nyata). Ini adalah penulisan semula contoh sebelumnya yang mengira 10 juta tarikh dalam urutan pekerja yang berasingan. Kini apabila anda mengklik butang penyemak imbas akan dapat memaparkan perenggan sebelum tarikh selesai dikira. Operasi pertama tidak lagi menghalang operasi kedua.
Ciri utama bahasa JavaScript ialah ia adalah satu benang, yang bermaksud bahawa ia hanya boleh melakukan satu perkara pada satu masa. Jadi mengapa JavaScript tidak boleh mempunyai berbilang benang? Ini boleh meningkatkan kecekapan.
Benang tunggal JavaScript adalah berkaitan dengan tujuannya. Sebagai bahasa skrip pelayar, tujuan utama JavaScript adalah untuk berinteraksi dengan pengguna dan memanipulasi DOM. Ini menentukan bahawa ia hanya boleh menjadi satu-benang, jika tidak, ia akan menyebabkan masalah penyegerakan yang sangat kompleks. Sebagai contoh, katakan JavaScript mempunyai dua utas pada masa yang sama Satu utas menambah kandungan pada nod DOM tertentu, dan utas lain memadamkan nod tersebut.
Jadi, untuk mengelakkan kerumitan, JavaScript telah menjadi satu utas sejak ia dilahirkan Ini telah menjadi ciri teras bahasa ini dan tidak akan berubah pada masa hadapan.
Untuk memanfaatkan kuasa pengkomputeran CPU berbilang teras, HTML5 mencadangkan standard Pekerja Web, yang membenarkan skrip JavaScript mencipta berbilang rangkaian, tetapi urutan anak dikawal sepenuhnya oleh utas utama dan tidak dibenarkan mengendalikan DOM. Oleh itu, piawaian baharu ini tidak mengubah sifat berbenang tunggal JavaScript.
Cadangan berkaitan: Tutorial pembelajaran javascript
Atas ialah kandungan terperinci Adakah javascript berulir tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!