JavaScript Çoklu İş Parçacığı Oluşturma


10

Bu günlerde JavaScript, kullanıcı arayüzünü daha iyi hale getirmek için istemci tarafında, istemci tarafında mantık, bazı web sunucularında sunucu tarafı mantığı olarak tüm web geliştirme teknolojilerinde ana oynatıcıdır.

Buna ek olarak, insanlar (en azından bazıları) web oyunu geliştirmede flashtan javascript ve HTML5'e geçmeye başladı.

Çoklu diş açmayı destekleme zamanı değil mi! JavaScript'in çok iş parçacıklı olmasına izin veren tarayıcılar var mı veya standartlar, HTML5 veya gelecekteki sürümlerde var mı?!


1
İnsanlar gerekli olmayan şeyleri yapmıyor. Javascript tasarımına katkıda bulunanlar, geliştirilmekte olan web sunucuları ve tarayıcıları ile ilgili olan kişilerdir. Tamamen fayda ile ilgili.
Dipan Mehta

Yanıtlar:


9

Çoklu iş parçacığı oluşturma işlemi EcmaScript'te yapılmaz, ancak ana bilgisayar ortamlarında gösterilebilir.

Klasik örnekler WebWorkers'tır ve bu sayede bir arka plan çalışanını çalışabilir ve <iframe>yeni süreçleri ortaya çıkarmanın bir yolu olarak kötüye kullanabilir.

JavaScript'te çoklu iş parçacığının gerekli olmadığı belirtilmelidir (istisnalar, özellikle grafiklerle ilgili programlar). Birden fazla iş parçacığına ihtiyacınız yoktur, GUI'niz için zaten bir olay döngünüz vardır ve grafik oluşturma (tuval) donanım hızlandırılmıştır (GPU grafiklerinizi sizin için paralel hale getirir).

Webcl gibi projeler oldukça heyecan verici olsa da.


2
"Gerekli değil" gerçeğini genişletebilir misiniz? Son zamanlarda masaüstü programlamanın doğal durumunun görevi yerine getirmek için bir iş parçacığı oluşturmak olacağı bir örnekle karşılaştım, ancak bu kolay veya standart bir seçenek değildi. Bu dava üzerinde çalıştım ama bir iplik yumurtlama daha zarif bir çözüm gibi görünüyordu.
Rig

@rig ele almaya çalıştığın durum neydi?
Zachary K

@Rig somut bir örnek verin. hesaplamalı olarak pahalı işlem, istemci tarafında JavaScript
Raynos

@Raynos lütfen nasıl gerekli olmadığına dair daha fazla açıklama yapın, sadece oyun geliştirmede, örneğin grafiklerde ve fizikte ve fizik ve mantık kare hızında ağır bir hesaplama varsa, sanırım çoklu iş parçacığı yoksa, kolayca etkileneceğini düşünüyorum.
Ali

@Ali dışarı çıktım ve istisnalar olduğunu söyledim. Bununla birlikte, bu yoğun hesaplamanın çoğu, donanım hızlandırmalı grafik API'sı aracılığıyla GPU'ya verilmelidir
Raynos

4

HAYIR

Çoklu iş parçacığı, yazılımda doğru olan en zor şeylerden biridir. Kodunuz deterministik olmadığında çalışması zor olan çok fazla köşe örneği vardır. (Ben kilitler vb ile çoklu iplik hakkında konuşuyorum). Ayrıca, çeşitli JavaScript kitaplıklarının tümü çok iş parçacıklı olmadığı varsayımı üzerine inşa edilmiştir.

Bu çok işlem türü işlemleri yapmak için aktör tabanlı bir çerçeve vermek web çalışanları olduğu söyleniyor. Etkinlikler aracılığıyla çalışanlar oluşturabilir ve verileri ileri geri aktarabilirsiniz.

DÜZENLEME: Diğer nedeni JavaScript oluşturulduğunda küçük görevler için kullanılacak varsayımı ile yapıldı, bu yüzden hiçbir eşzamanlılık inşa edildi. Retrofit için şimdi çok kod kıracaktı. Web çalışanları ekleyerek, herhangi bir paylaşılan bellek olmadan eşzamanlılık olduğu bir sisteme sahip olmak mümkün olmuştur, ancak aktörleri kullanarak, Erlang, Scala, Clojure gibi diğer dillerde çok sağlam olduğunu gösteren bir eşzamanlılık modeli vb.

(Kilit tabanlı eşzamanlılığı gerçekten sevmediğimi söyleyemiyorsanız)


1
Multi threading is one of the hardest things in software to get right.- Ben sadece şaşırdım! Kullandığınız tarayıcı, masaüstünüzün işletim sistemi, bu sayfaya hizmet veren web sunucusu - hemen hemen her gün kullandığınız her uygulama çok iş parçacıklı. BT DEDİĞİNİZDEN EMİN MİSİNİZ? Henüz seni küçümsemek için, ama söyleyeceğimmultithreading is not done because it is hard
Dipan Mehta

3
@DipanMehta çoklu iş parçacığı olduğunu doğru bir şekilde yazılımın en zor şeylerden biri. Tüm bu uygulamaların kullanmasının nedeni, gerçekten yetenekli insanlar
Raynos

@Raynos - Tanrım! Yani bana yetenekli diyorsun! Her gün kullanıyorum ... C programlama veya büyük ölçekli bir uygulama olduğunda, oldukça yaygın olduğunu düşünüyorum. Mesele şu ki, kullanım ve gereksinime bakılmaksızın, W3C konsorsiyumu çok zor olduğu için Javascript için gerçekten ayırmadı !
Dipan Mehta

2
Doğru ve verimli paralel programlar yazmanın ne kadar zor olduğunu ciddi şekilde anlarsınız. Ancak çoklu iş parçacığı JavaScript'te değil çünkü gereksiz karmaşıklığı (şey 3 hafta içinde yazıldı)
Raynos

2
@DipanMehta kilit tabanlı bir eşzamanlılığı doğru yapmak ve tüm köşe vakalarını çivilemek zor bir sorundur. Örneğin, kilitleri olan sıra gibi basit bir şeyin her durumda doğru olduğu kanıtlanmış bir uygulama, birkaç yıl öncesine kadar yayınlanabilir bir sonuç olurdu. Ama daha da önemlisi, bunu sahip olmayan bir dile uyarlamayı denemek sorun istiyor.
Zachary K

3

javascript'i multithreading için açmak, çözdüğünden daha fazla sorun yaratacaktır:

mevcut mimari tek iş parçacıklı olay tabanlıdır (diğer bir deyişle gui iş parçacığında değil) kodda.

önleme veya paralel yürütmeye izin verir vermez bu özellik kaybolacaktır, bu, değiştirmek istediğiniz verilere kilitler uygulamanızın yanı sıra önlemek için yarış koşullarında hata ayıklamak için tüm zorluğa sahip olmanız gerektiği anlamına gelir

zaman aşımlarını kullanarak sözde paralel yürütme yapmak mümkündür, bu da büyük veya uzun çalışma işlevlerini atomik parçalara bölmek ve setTimeout(function(){nextstep(args);},1);gerektiğinde diğer şeylerin çalışabilmesi için kullanmak anlamına gelir


0

Intel bir süre önce Javascript'te paralel programlama sağlayan River Trail'i piyasaya sürdü . Ancak, yalnızca Firefox eklentisi ve bu teknolojiyi W3C'ye getiren çok daha az ECMA'ya sahip bir yol haritası duymadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.