JavaScript Multi Threading

10

Nah hari ini JavaScript adalah pemain utama dalam semua teknologi pengembangan web, di sisi klien untuk membuat antarmuka pengguna lebih baik, logika sisi klien, pada beberapa server web sebagai logika sisi server juga

Tambahkan ke fakta orang (setidaknya beberapa dari mereka) mulai bergerak dalam pengembangan game web dari flash ke javascript dan HTML5

Bukankah ini saatnya mendukung multi threading! Adakah browser yang memungkinkan JavaScript untuk multi-threaded atau apakah ada dalam standar, HTML5 atau versi masa depan ?!

Ali
sumber
1
Orang tidak melakukan hal-hal yang tidak diperlukan. Orang yang telah berkontribusi dalam desain Javascript, juga orang yang terkait dengan webserver dan browser yang sedang dikembangkan sehingga mereka tahu tentang hal itu. Ini semua tentang utilitas.
Dipan Mehta

Jawaban:

9

Multi threading tidak akan dilakukan dalam EcmaScript tetapi dapat diekspos di lingkungan host.

Contoh klasiknya adalah WebWorkers yang memungkinkan Anda untuk memutar pekerja latar belakang untuk melakukan pekerjaan dan menyalahgunakan <iframe>sebagai cara untuk menelurkan proses baru.

Perlu dicatat bahwa multi threading dalam JavaScript tidak diperlukan (ada pengecualian, terutama program yang berhubungan dengan grafis). Anda tidak memerlukan banyak utas, Anda sudah memiliki loop acara untuk GUI Anda dan rendering grafik Anda (kanvas) dipercepat perangkat keras (artinya GPU membuat grafik Anda secara paralel untuk Anda).

Meskipun proyek-proyek seperti webcl sangat menarik.

Raynos
sumber
2
Bisakah Anda memperluas fakta bahwa itu "tidak diperlukan"? Saya bertemu dengan sebuah contoh baru-baru ini di mana kasus alami dalam pemrograman desktop akan menelurkan thread untuk menangani tugas tapi itu jelas bukan pilihan yang mudah atau standar. Saya menangani kasus itu tetapi menelurkan untaian tampaknya menjadi solusi yang lebih elegan.
Rig
@ atau apa kasus yang Anda coba tangani?
Zachary K
@Rig memberikan contoh nyata. pemrosesan yang mahal secara komputasi jarang terjadi di sisi klien JavaScript
Raynos
@ Raynos tolong jelaskan lebih lanjut tentang bagaimana itu tidak diperlukan, saya hanya berpikir tidak yakin bahwa dalam pengembangan game misalnya jika ada perhitungan yang berat pada grafik dan pada fisika dan frame rate logika akan mudah terpengaruh jika tidak ada multithreading di sana saya pikir
Ali
@Ali saya keluar dan mengatakan ada pengecualian. Namun sebagian besar perhitungan berat itu harus diberikan kepada GPU melalui perangkat keras grafik akselerasi API
Raynos
4

TIDAK

Multi threading adalah salah satu hal tersulit dalam peranti lunak untuk diperbaiki. Ada terlalu banyak kasus sudut yang sangat sulit untuk diselesaikan ketika kode Anda tidak deterministik. (Saya berbicara tentang multi threading dengan kunci dll). Selain itu, semua berbagai pustaka JavaScript dibangun dengan asumsi bahwa itu bukan multi-threaded.

Yang sedang berkata ada pekerja web yang memberi Anda kerangka kerja berbasis aktor untuk melakukan jenis operasi multi pemrosesan. Anda dapat membuat pekerja dan meneruskan data bolak-balik melalui acara.

EDIT: Alasan lain adalah bahwa ketika JavaScript dibuat itu dilakukan dengan asumsi itu akan digunakan untuk tugas-tugas kecil, jadi tidak ada konkurensi dibangun. Untuk retrofit sekarang akan memecah banyak kode. Dengan menambahkan pekerja web, dimungkinkan untuk memiliki sistem jika ada konkurensi tanpa memori bersama, tetapi dengan menggunakan aktor, model konkurensi yang telah menunjukkan dirinya sangat kuat di sejumlah bahasa lain seperti Erlang, Scala, Clojure dll.

(JIKA Anda tidak bisa mengatakan saya benar-benar tidak suka concurrency berbasis kunci)

Zachary K
sumber
1
Multi threading is one of the hardest things in software to get right.- Saya hanya terkejut dengan ini! Browser yang Anda gunakan, OS desktop Anda, server web yang melayani halaman ini - praktis setiap aplikasi yang Anda gunakan sehari-hari memiliki multithreaded. APAKAH ANDA YAKIN BERARTI? Belum untuk menurunkan Anda, tetapi saya akan jika Anda mengatakanmultithreading is not done because it is hard
Dipan Mehta
3
@DipanMehta multi threading adalah salah satu hal tersulit dalam peranti lunak untuk diperbaiki . Alasan semua aplikasi itu menggunakannya adalah karena itu ditulis oleh orang
Raynos
@ Raynos - Ya ampun! Jadi kau memanggilku berbakat! Saya menggunakannya setiap hari ... saya pikir ketika Anda sedang pemrograman C atau aplikasi skala besar, itu cukup umum. Intinya, terlepas dari penggunaan dan persyaratan, konsorsium W3C tidak benar-benar menyelamatkannya untuk Javascript karena terlalu sulit !
Dipan Mehta
2
Anda sangat meremehkan betapa sulitnya untuk menulis program paralel yang benar dan efisien. Tetapi multi threading tidak ada dalam JavaScript karena kerumitannya yang tidak perlu (masalahnya ditulis dalam 3 minggu)
Raynos
2
@DipanMehta menyelesaikan konkurensi berbasis kunci dilakukan dengan benar, dan memaku semua kasing adalah masalah yang sulit. Misalnya implementasi dari sesuatu yang sederhana seperti antrian dengan kunci yang dapat dibuktikan benar dalam semua kasus akan menjadi hasil yang dapat dipublikasikan hingga beberapa tahun yang lalu. Tetapi yang lebih penting mencoba untuk retrofit ke bahasa yang belum meminta masalah.
Zachary K
3

membuka javascript untuk multithreading akan menciptakan lebih banyak masalah daripada yang dipecahkan:

arsitektur saat ini adalah event-threaded tunggal berbasis (berjalan di gui thread lebih sering daripada tidak) dengan kata lain dengan setiap blok kode Anda dapat yakin bahwa tidak ada dalam lingkungan akan berubah dari awal hingga akhir kecuali apa yang diubah dalam kode.

segera setelah Anda mengizinkan preemption atau eksekusi paralel fitur ini akan hilang, ini berarti bahwa Anda perlu menerapkan kunci ke data yang ingin Anda mutasi plus memiliki seluruh sulit untuk debug kondisi ras untuk menghindari

dimungkinkan untuk melakukan eksekusi pseudo-paralel menggunakan batas waktu, ini berarti membagi fungsi yang besar atau panjang menjadi potongan atom dan menggunakan setTimeout(function(){nextstep(args);},1);sehingga hal-hal lain dapat berjalan jika diperlukan

aneh ratchet
sumber
0

Intel merilis River Trail beberapa waktu lalu, yang memungkinkan pemrograman paralel dalam Javascript. Namun, ini hanya plugin Firefox dan saya belum pernah mendengar tentang peta jalan yang membawa teknologi ini ke W3C, apalagi ECMA.

Demian Brecht
sumber