เธรด Multi JavaScript


10

ทุกวันนี้ JavaScript เป็นผู้เล่นหลักในเทคโนโลยีการพัฒนาเว็บทั้งหมดในฝั่งไคลเอ็นต์เพื่อทำให้ส่วนต่อประสานผู้ใช้ดีขึ้นตรรกะฝั่งไคลเอ็นต์บนบางเว็บเซิร์ฟเวอร์เป็นฝั่งเซิร์ฟเวอร์

เพิ่มความจริงของคน (อย่างน้อยบางคน) เริ่มเคลื่อนไหวในการพัฒนาเกมบนเว็บตั้งแต่แฟลชจาวาสคริปต์และ HTML5

ถึงเวลาแล้วหรือยังที่จะรองรับมัลติเธรด! มีเบราว์เซอร์ที่อนุญาตให้ JavaScript เป็นแบบมัลติเธรดหรือมีมาตรฐาน HTML5 หรือเวอร์ชั่นในอนาคตหรือไม่!


1
ผู้คนไม่ทำสิ่งที่ไม่จำเป็น ผู้ที่มีส่วนร่วมในการออกแบบ Javascript ก็เป็นผู้ที่เกี่ยวข้องกับเว็บเซิร์ฟเวอร์และเบราว์เซอร์ที่ได้รับการพัฒนาเพื่อให้พวกเขารู้เกี่ยวกับมัน มันคือทั้งหมดที่เกี่ยวกับยูทิลิตี้
Dipan Mehta

คำตอบ:


9

มัลติเธรดจะไม่สามารถทำได้ใน EcmaScript แต่สามารถแสดงในสภาพแวดล้อมโฮสต์

ตัวอย่างคลาสสิกคือWebWorkersซึ่งช่วยให้คุณสามารถเพิ่มผู้ทำงานเบื้องหลังให้ทำงานและเหยียดหยาม<iframe>วิธีการวางไข่กระบวนการใหม่

ควรสังเกตว่าไม่จำเป็นต้องใช้หลายเธรดใน JavaScript (มีข้อยกเว้นส่วนใหญ่เป็นโปรแกรมที่เกี่ยวข้องกับกราฟิก) คุณไม่จำเป็นต้องมีหลายเธรดคุณมีเหตุการณ์วนรอบสำหรับ GUI ของคุณและการเรนเดอร์กราฟิกของคุณ (แคนวาส) คือฮาร์ดแวร์ที่เร่งความเร็ว (หมายถึง GPU ทำให้กราฟิกของคุณขนานกันสำหรับคุณ)

แม้ว่าโครงการอย่างwebclจะค่อนข้างน่าตื่นเต้น


2
คุณสามารถขยายความจริงที่ว่า "ไม่จำเป็น" ได้หรือไม่? ฉันวิ่งเข้าไปในอินสแตนซ์เมื่อเร็ว ๆ นี้ที่กรณีธรรมชาติในการเขียนโปรแกรมเดสก์ท็อปจะวางไข่เธรดเพื่อจัดการงาน แต่ที่เห็นได้ชัดว่าไม่ใช่ตัวเลือกที่ง่ายหรือมาตรฐาน ฉันทำงานในกรณีนั้น แต่การวางไข่ด้ายดูเหมือนจะเป็นทางออกที่หรูหรา
Rig

@ นี่เป็นกรณีอะไรที่คุณพยายามจัดการอยู่?
Zachary K

@Rig ให้ตัวอย่างที่เป็นรูปธรรม การประมวลผลที่มีราคาแพงนั้นหายากในฝั่งไคลเอ็นต์ JavaScript
Raynos

@ Raynos โปรดอธิบายเพิ่มเติมเกี่ยวกับวิธีการที่ไม่จำเป็นฉันแค่คิดว่าไม่แน่ใจว่าในการพัฒนาเกมเช่นถ้ามีการคำนวณหนักในกราฟิกและฟิสิกส์และอัตราเฟรมตรรกะและจะได้รับผลกระทบได้อย่างง่ายดายถ้าไม่มีมัลติเธรดฉันคิดว่า
Ali

@Ali ฉัน copped ออกและกล่าวว่ามีข้อยกเว้น อย่างไรก็ตามการคำนวณส่วนใหญ่นั้นควรให้ GPU ผ่านทางฮาร์ดแวร์เร่งกราฟิก API
Raynos

4

NO

มัลติเธรดเป็นหนึ่งในสิ่งที่ยากที่สุดในซอฟต์แวร์ที่จะทำให้ถูกต้อง มีหลายกรณีที่มุมมากเกินไปที่ยากที่จะทำงานออกเมื่อรหัสของคุณไม่ได้กำหนดไว้ (ฉันกำลังพูดถึงหลายเธรดพร้อมล็อค ฯลฯ ) นอกจากนี้ยังมีไลบรารี JavaScript ต่างๆทั้งหมดที่สร้างขึ้นบนสมมติฐานที่ว่ามันไม่ได้เป็นแบบมัลติเธรด

ที่ถูกกล่าวว่ามีคนงานเว็บที่ให้กรอบการทำงานตามนักแสดงสำหรับการดำเนินการหลายประเภทของการดำเนินงาน คุณสามารถสร้างคนงานและส่งผ่านข้อมูลไปมาผ่านกิจกรรมต่างๆ

แก้ไข: เหตุผลอื่นคือเมื่อสร้าง JavaScript เสร็จแล้วด้วยสมมติฐานที่ว่ามันจะถูกใช้สำหรับงานเล็ก ๆ ดังนั้นจึงไม่มีการสร้างการทำงานพร้อมกันในการติดตั้งเพิ่มตอนนี้มันจะทำลายโค้ดจำนวนมาก การเพิ่มคนทำงานเว็บเป็นไปได้ที่จะมีระบบหากมีการทำงานพร้อมกันโดยไม่มีหน่วยความจำร่วม แต่ด้วยการใช้นักแสดงรูปแบบของการทำงานพร้อมกันที่แสดงให้เห็นว่าตัวเองแข็งแกร่งมากในภาษาอื่น ๆ เช่น Erlang, Scala, Clojure เป็นต้น

(ถ้าคุณไม่สามารถบอกได้ว่าฉันไม่ชอบการล็อคพ้องด้วยกันจริงๆ)


1
Multi threading is one of the hardest things in software to get right.- ฉันเพิ่งประหลาดใจกับสิ่งนี้! เบราว์เซอร์ที่คุณใช้ระบบปฏิบัติการเดสก์ท็อปของคุณเว็บเซิร์ฟเวอร์ที่ให้บริการหน้านี้ - แอพพลิเคชั่นที่คุณใช้ทุกวันนั้นมีหลายเธรด คุณแน่ใจหรือว่าหมายถึง ยังไม่ลงคะแนนให้คุณ แต่ฉันจะถ้าคุณพูดmultithreading is not done because it is hard
Dipan Mehta

3
@DipanMehta การมัลติเธรดเป็นหนึ่งในสิ่งที่ยากที่สุดในซอฟต์แวร์ที่จะทำให้ถูกต้อง เหตุผลที่แอปพลิเคชั่นเหล่านี้ใช้เพราะเป็นงานที่เขียนขึ้นโดยคนที่มีความสามารถจริงๆ
Raynos

@ Raynos - ความดีของฉัน! ดังนั้นคุณเรียกฉันว่ามีความสามารถ! ฉันใช้มันทุกวัน ... ฉันคิดว่าเมื่อคุณเขียนโปรแกรม C หรือแอปพลิเคชันขนาดใหญ่มันเป็นเรื่องธรรมดา ประเด็นก็คือไม่คำนึงถึงการใช้งานและความต้องการ W3C consortium ไม่ได้ยกเว้นไว้สำหรับ Javascript เพราะมันยากเกินไป !
Dipan Mehta

2
การเข้าใจอย่างจริงจังว่าการเขียนโปรแกรมขนานที่ถูกต้องและมีประสิทธิภาพเป็นเรื่องยากเพียงใด แต่การทำเธรดหลายอันไม่ได้อยู่ใน JavaScript เพราะความซับซ้อนที่ไม่จำเป็น (สิ่งนี้เขียนใน 3 สัปดาห์)
Raynos

2
@DipanMehta ทำให้การล็อคที่เกิดขึ้นพร้อมกันนั้นถูกต้องและการตอกหมุดทุกมุมเป็นปัญหาที่ยาก ตัวอย่างเช่นการนำบางสิ่งมาใช้อย่างเรียบง่ายเหมือนกับคิวที่มีการล็อกซึ่งสามารถพิสูจน์ได้ว่าถูกต้องในทุกกรณีจะเป็นผลลัพธ์ที่เผยแพร่ได้จนถึงไม่กี่ปีที่ผ่านมา แต่ที่สำคัญกว่านั้นคือพยายามติดตั้งเพิ่มเติมซึ่งเป็นภาษาที่ไม่ได้มีการถามถึงปัญหา
Zachary K

3

การเปิด javascript ขึ้นมาเพื่อใช้งานแบบมัลติเธรดจะสร้างปัญหามากกว่าที่จะแก้ไขได้:

สถาปัตยกรรมปัจจุบันเป็นเหตุการณ์แบบเธรดเดียว (ทำงานในเธรด gui บ่อยกว่าไม่) ในคำอื่น ๆ ที่มีบล็อกทุกรหัสคุณสามารถมั่นใจได้ว่าไม่มีอะไรในสภาพแวดล้อมที่จะเปลี่ยนจากจุดเริ่มต้นถึงจุดสิ้นสุดยกเว้นสิ่งที่มีการเปลี่ยนแปลง ในรหัส

ทันทีที่คุณอนุญาตการจองหรือการดำเนินการแบบขนานคุณสมบัตินี้จะหายไปซึ่งหมายความว่าคุณต้องใช้การล็อกกับข้อมูลที่คุณต้องการที่จะกลายพันธุ์รวมทั้งมีการยากที่จะตรวจแก้จุดบกพร่องเงื่อนไขการแข่งขันทั้งหมด

เป็นไปได้ที่จะมีการประมวลผลแบบขนานหลอกโดยใช้การหมดเวลาซึ่งหมายถึงการแยกฟังก์ชั่นการทำงานขนาดใหญ่หรือยาวเข้าไว้ในกลุ่มอะตอมมิกและใช้setTimeout(function(){nextstep(args);},1);เพื่อให้สิ่งอื่น ๆ สามารถทำงานได้หากจำเป็น


0

Intel เปิดตัวRiver Trailเมื่อไม่นานมานี้ซึ่งเปิดใช้งานการเขียนโปรแกรมแบบขนานใน Javascript อย่างไรก็ตามมันเป็นปลั๊กอินสำหรับ Firefox เท่านั้นและฉันไม่เคยได้ยินเรื่องแผนการทำงานที่นำเทคโนโลยีนี้มาใช้ใน W3C ซึ่งเป็น ECMA ที่น้อยกว่ามาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.