การทำงานพร้อมกันคือการทำงานสองอย่างพร้อมกันบนเธรดแยกกัน อย่างไรก็ตามวิธีการแบบอะซิงโครนัสทำงานแบบขนาน แต่อยู่บน 1 เธรดเดียวกัน สิ่งนี้สำเร็จได้อย่างไร นอกจากนี้สิ่งที่เกี่ยวกับความเท่าเทียมกัน?
อะไรคือความแตกต่างระหว่างแนวคิดทั้งสามนี้
การทำงานพร้อมกันคือการทำงานสองอย่างพร้อมกันบนเธรดแยกกัน อย่างไรก็ตามวิธีการแบบอะซิงโครนัสทำงานแบบขนาน แต่อยู่บน 1 เธรดเดียวกัน สิ่งนี้สำเร็จได้อย่างไร นอกจากนี้สิ่งที่เกี่ยวกับความเท่าเทียมกัน?
อะไรคือความแตกต่างระหว่างแนวคิดทั้งสามนี้
คำตอบ:
พร้อมกันและขนานเป็นหลักการเดียวกับที่คุณคาดเดาได้อย่างถูกต้องทั้งสองเกี่ยวข้องกับงานที่ถูกดำเนินการพร้อมกันแม้ว่าฉันจะบอกว่างานแบบขนานควรจะทำงานหลายอย่างแท้จริง, ดำเนินการ "ในเวลาเดียวกัน" ในขณะเดียวกันก็หมายความว่า ด้ายการดำเนินการในขณะที่ยังคงปรากฏที่จะดำเนินการแบบคู่ขนาน
วิธีการแบบอะซิงโครนัสไม่ได้เกี่ยวข้องโดยตรงกับแนวคิดสองข้อก่อนหน้านี้อะซิงโครนัสถูกใช้เพื่อแสดงความประทับใจของ tasking ที่เกิดขึ้นพร้อมกันหรือขนานกัน แต่โดยปกติแล้วการเรียกใช้วิธีอะซิงโครนัส ไม่ต้องการรอและบล็อกแอปพลิเคชันของเราเพื่อรอการตอบกลับ
ตัวอย่างเช่นการรับข้อมูลจากฐานข้อมูลอาจใช้เวลา แต่เราไม่ต้องการบล็อก UI ของเราที่รอข้อมูล การเรียกใช้ async ใช้การอ้างอิงการโทรกลับและส่งกลับการดำเนินการกลับไปที่รหัสของคุณทันทีที่มีการร้องขอกับระบบระยะไกล UI ของคุณสามารถตอบสนองต่อผู้ใช้อย่างต่อเนื่องในขณะที่ระบบระยะไกลทำการประมวลผลใด ๆ ที่จำเป็นเมื่อมันส่งคืนข้อมูลไปยังวิธีการโทรกลับของคุณแล้ววิธีนั้นจะสามารถอัปเดต UI (หรือแฮนด์ออฟการปรับปรุงนั้น) ตามความเหมาะสม
จากเปอร์สเปคทีฟผู้ใช้ดูเหมือนว่ามัลติทาสก์ แต่อาจไม่ใช่
แก้ไข
อาจเพิ่มความคุ้มค่าว่าในการติดตั้งหลายครั้งการเรียกเมธอดแบบอะซิงโครนัสจะทำให้เธรดหมุนตัว แต่ไม่จำเป็นจริงๆขึ้นอยู่กับการดำเนินการที่ถูกเรียกใช้และวิธีการตอบสนองที่สามารถแจ้งกลับไปยังระบบได้
ในระยะสั้น
การเกิดขึ้นพร้อมกันหมายถึงงานหลายอย่างที่เริ่มต้นทำงานและเสร็จสมบูรณ์ในช่วงเวลาที่ทับซ้อนกันโดยไม่มีลำดับที่เฉพาะเจาะจง Parallelism คือเมื่อมีหลายงานหรือหลายส่วนของงานที่ไม่ซ้ำกันทำงานในเวลาเดียวกันเช่นในตัวประมวลผลแบบมัลติคอร์
โปรดจำไว้ว่าการเห็นพ้องด้วยและความเท่าเทียมนั้นไม่เหมือนกัน
ความแตกต่างระหว่างการเกิดพร้อมกันกับการขนาน
ทีนี้มาดูความแตกต่างที่เห็นได้ชัดเจนระหว่างการเกิดพร้อมกันและการขนานกัน
การเกิดขึ้นพร้อมกันคือเมื่องานสองงานสามารถเริ่มทำงานและทำงานให้เสร็จสมบูรณ์ในช่วงเวลาที่ทับซ้อนกัน Parallelism คือเมื่องานรันอย่างแท้จริงในเวลาเดียวกันเช่น บนตัวประมวลผลแบบมัลติคอร์
การเกิดพร้อมกันคือการรวมกันของกระบวนการดำเนินการอย่างเป็นอิสระในขณะที่การขนานคือการคำนวณ (อาจเกี่ยวข้อง) พร้อมกัน
การเกิดขึ้นพร้อมกันนั้นเกี่ยวกับการจัดการกับสิ่งต่าง ๆ มากมายในคราวเดียว ความเท่าเทียมเป็นเรื่องเกี่ยวกับการทำสิ่งต่าง ๆ มากมายในครั้งเดียว
แอปพลิเคชันสามารถเกิดขึ้นพร้อมกัน - แต่ไม่ขนานกันซึ่งหมายความว่ามันประมวลผลมากกว่าหนึ่งงานในเวลาเดียวกัน แต่ไม่มีงานสองงานที่ดำเนินการในเวลาเดียวกันทันที
แอปพลิเคชันสามารถขนานกัน แต่ไม่พร้อมกันซึ่งหมายความว่ามันประมวลผลงานย่อยหลายงานในซีพียูหลายคอร์ในเวลาเดียวกัน
แอปพลิเคชันไม่สามารถขนานกันหรือไม่พร้อมกันซึ่งหมายความว่ามันจะประมวลผลงานทั้งหมดทีละรายการตามลำดับ
แอปพลิเคชันสามารถเป็นได้ทั้งแบบขนานและพร้อมกันซึ่งหมายความว่ามันจะประมวลผลหลาย ๆ งานพร้อมกันใน CPU แบบมัลติคอร์ในเวลาเดียวกัน
เห็นพ้องด้วย
การเห็นพ้องต้องกันมีผลบังคับใช้เป็นหลักเมื่อเราพูดถึงงานขั้นต่ำสองงานขึ้นไป เมื่อแอปพลิเคชันมีความสามารถในการดำเนินงานสองอย่างในเวลาเดียวกันเราเรียกมันว่าแอปพลิเคชันพร้อมกัน แม้ว่าที่นี่จะทำงานเหมือนกันพร้อมกัน แต่โดยหลักแล้วพวกเขาอาจไม่ทำงาน พวกเขาใช้ประโยชน์จากคุณสมบัติการแบ่งเวลา CPU ของระบบปฏิบัติการที่แต่ละงานรันส่วนของงานแล้วไปสู่สถานะรอ เมื่องานแรกอยู่ในสถานะรอ CPU จะถูกกำหนดให้กับงานที่สองเพื่อให้งานเป็นส่วนหนึ่งของงาน
ระบบปฏิบัติการตามลำดับความสำคัญของงานจึงกำหนด CPU และทรัพยากรการคำนวณอื่น ๆ เช่นหน่วยความจำ เปิดโดยหันไปงานทั้งหมดและให้พวกเขามีโอกาสที่จะเสร็จสมบูรณ์ สำหรับผู้ใช้ดูเหมือนว่างานทั้งหมดจะทำงานแบบขนาน สิ่งนี้เรียกว่าการเกิดพร้อมกัน
ความเท่าเทียม
Parallelism ไม่จำเป็นต้องมีสองงาน โดยแท้จริงแล้วจะรันบางส่วนของงานหรือหลาย ๆ งานในเวลาเดียวกันโดยใช้โครงสร้างพื้นฐานแบบมัลติคอร์ของ CPU โดยการกำหนดหนึ่งคอร์ให้กับแต่ละงานหรืองานย่อย
ความเท่าเทียมต้องใช้ฮาร์ดแวร์ที่มีหน่วยประมวลผลหลายหน่วยเป็นหลัก ในซีพียูแกนเดี่ยวคุณอาจได้รับพร้อมกัน แต่ไม่ขนานกัน
วิธีการแบบอะซิงโครนัส
สิ่งนี้ไม่เกี่ยวข้องกับ Concurrency และ parallelism, asynchrony ใช้เพื่อแสดงความประทับใจของ tasking ที่เกิดขึ้นพร้อมกันหรือขนานกัน แต่โดยปกติแล้วการเรียกเมธอดแบบอะซิงโครนัสจะมีประสิทธิภาพสำหรับกระบวนการที่ต้องทำงานให้ห่างจากแอปพลิเคชันปัจจุบัน รอและปิดกั้นแอปพลิเคชันของเราเพื่อรอการตอบกลับ
การเกิดขึ้นพร้อมกันคือเมื่อการดำเนินการของหลาย ๆ งานเป็น interleaved แทนที่จะเป็นงานที่ถูกดำเนินการตามลำดับทีละรายการ
Parallelismคือเมื่องานเหล่านี้ถูกดำเนินการแบบขนาน
อะซิงโครนัสเป็นแนวคิดแยกต่างหาก (แม้ว่าจะเกี่ยวข้องในบางบริบท) มันหมายถึงข้อเท็จจริงที่ว่าเหตุการณ์หนึ่งอาจเกิดขึ้นในเวลาที่แตกต่างกัน (ไม่ใช่แบบซิงโครนัส) กับเหตุการณ์อื่น แผนภาพด้านล่างแสดงให้เห็นถึงความแตกต่างระหว่างการดำเนินการแบบซิงโครนัสและแบบอะซิงโครนัสที่นักแสดงสามารถสอดคล้องกับเธรดกระบวนการหรือเซิร์ฟเวอร์ที่แตกต่างกันได้
ทุกคนกำลังมีปัญหาในการเชื่อมโยงแบบอะซิงโครนัสกับการขนานหรือการเกิดพร้อมกันเนื่องจากอะซิงโครนัสไม่ใช่ antonym กับขนานหรือพร้อมกัน มันเป็นตรงข้ามของซิงโครนัส ซึ่งเพิ่งระบุว่าบางสิ่งบางอย่างในกรณีนี้เธรดจะถูกซิงก์กับสิ่งอื่นในกรณีนี้อีกเธรด
มีหลายสถานการณ์ที่สามารถเกิดขึ้นพร้อมกัน:
อะซิงโครนัส - ซึ่งหมายความว่าโปรแกรมของคุณทำงานที่ไม่ปิดกั้น ตัวอย่างเช่นมันสามารถเริ่มต้นการร้องขอสำหรับทรัพยากรระยะไกลผ่าน HTTP จากนั้นไปทำภารกิจอื่น ๆ ในขณะที่รอการตอบสนองที่จะได้รับ มันเหมือนกับว่าคุณส่งอีเมลและดำเนินชีวิตต่อไปโดยไม่รอคำตอบ
Parallelism - ซึ่งหมายความว่าโปรแกรมของคุณใช้ประโยชน์จากฮาร์ดแวร์ของเครื่องมัลติคอร์เพื่อดำเนินงานในเวลาเดียวกันโดยแบ่งงานเป็นงานแต่ละงานจะดำเนินการบนแกนแยกต่างหาก มันเหมือนกับการร้องเพลงในห้องอาบน้ำ: คุณกำลังทำสองสิ่งในเวลาเดียวกัน
Multithreading - เป็นการใช้งานซอฟต์แวร์ที่อนุญาตให้เธรดที่แตกต่างกันสามารถดำเนินการพร้อมกันได้ โปรแกรมมัลติเธรดดูเหมือนว่าจะทำหลาย ๆ อย่างในเวลาเดียวกันแม้ว่ามันจะทำงานบนเครื่องที่มีแกนเดียวก็ตาม นี่เป็นการพูดคุยกับผู้คนที่แตกต่างกันผ่านหน้าต่าง IM ต่างๆ แม้ว่าคุณจะสลับไปมาจริง ๆ แล้วผลลัพธ์สุทธิก็คือคุณมีการสนทนาหลายรายการพร้อมกัน
เห็นพ้องด้วย
การเกิดขึ้นพร้อมกันหมายความว่าแอปพลิเคชันกำลังดำเนินการกับงานมากกว่าหนึ่งงานในเวลาเดียวกัน (พร้อมกัน) ถ้าคอมพิวเตอร์มี CPU เพียงตัวเดียวแอปพลิเคชั่นอาจไม่สามารถทำงานได้มากกว่าหนึ่งงานในเวลาเดียวกัน แต่จะมีการประมวลผลงานมากกว่าหนึ่งงานในแต่ละครั้งภายในแอปพลิเคชัน มันไม่เสร็จสิ้นภารกิจเดียวก่อนที่จะเริ่มงานต่อไป
ความเท่าเทียม
Parallelism หมายถึงแอพพลิเคชั่นที่แยกงานออกเป็นงานย่อยขนาดเล็กซึ่งสามารถประมวลผลแบบขนานเช่นบน CPU หลายตัวในเวลาเดียวกัน
การเห็นพ้องด้วยกับความเท่าเทียมในรายละเอียด
อย่างที่คุณเห็นการทำงานพร้อมกันนั้นเกี่ยวข้องกับวิธีที่แอพพลิเคชั่นจัดการงานหลายอย่าง แอปพลิเคชันอาจดำเนินการหนึ่งงานในเวลา (เรียงตามลำดับ) หรือทำงานหลายงานในเวลาเดียวกัน (พร้อมกัน)
ในทางกลับกัน Parallelism นั้นเกี่ยวข้องกับวิธีที่แอพพลิเคชั่นจัดการงานแต่ละงาน แอปพลิเคชันอาจประมวลผลงานตามลำดับตั้งแต่ต้นจนจบหรือแยกงานออกเป็นงานย่อยที่สามารถทำให้เสร็จพร้อมกัน
อย่างที่คุณเห็นแอปพลิเคชันสามารถทำงานพร้อมกันได้ แต่ไม่ขนานกัน ซึ่งหมายความว่ามันประมวลผลมากกว่าหนึ่งงานในเวลาเดียวกัน แต่งานจะไม่แยกย่อยออกเป็นงานย่อย
แอปพลิเคชันสามารถขนาน แต่ไม่พร้อมกัน ซึ่งหมายความว่าแอปพลิเคชันจะทำงานได้ครั้งละหนึ่งงานเท่านั้นและงานนี้แบ่งออกเป็นงานย่อยที่สามารถประมวลผลแบบขนานได้
นอกจากนี้แอปพลิเคชันจะต้องไม่พร้อมกันหรือขนานกัน ซึ่งหมายความว่าทำงานได้ครั้งละหนึ่งงานเท่านั้นและงานจะไม่แยกย่อยออกเป็นงานย่อยเพื่อการทำงานแบบขนาน
ในที่สุดแอปพลิเคชันสามารถเป็นได้ทั้งแบบพร้อมกันและแบบขนานโดยที่มันสามารถทำงานได้หลายงานในเวลาเดียวกันและยังแบ่งงานแต่ละงานออกเป็นงานย่อยเพื่อการทำงานแบบขนาน อย่างไรก็ตามข้อดีบางประการของการเกิดพร้อมกันและความเท่าเทียมอาจหายไปในสถานการณ์นี้เนื่องจากซีพียูในคอมพิวเตอร์มักจะยุ่งอยู่กับการเกิดขึ้นพร้อมกันหรือคู่ขนานเพียงอย่างเดียว การรวมเข้าด้วยกันอาจนำไปสู่การเพิ่มประสิทธิภาพเพียงเล็กน้อยหรือการสูญเสียประสิทธิภาพ ตรวจสอบให้แน่ใจว่าคุณวิเคราะห์และวัดผลก่อนที่คุณจะใช้ตัวแบบขนานพร้อมกัน
จากhttp://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
ขนาน:มันเป็นคำกว้างที่หมายความว่าโค้ดสองชิ้นเรียกใช้งาน "ในเวลาเดียวกัน" ไม่สำคัญว่ามันจะเป็น "ของจริง" แบบคู่ขนานหรือถ้ามันแกล้งผ่านรูปแบบการออกแบบที่ฉลาด ประเด็นก็คือคุณสามารถเริ่มต้น "งาน" ในเวลาเดียวกันแล้วควบคุมแยกต่างหาก (ด้วย mutex และเทคนิคที่เหมาะสมทั้งหมด) แต่โดยปกติแล้วคุณต้องการใช้คำว่า "ขนาน" สำหรับขนาน "จริง" เท่านั้นใน: คุณทำให้มันเกิดขึ้นผ่านการทำงานหลายอย่างที่ไม่ทำงานร่วมกัน (ไม่ว่าจะเป็นแกน CPU / GPU หรือในระดับซอฟต์แวร์โดยปล่อยให้ระบบปฏิบัติการจัดการ ในระดับต่ำมาก) ผู้คนลังเลที่จะพูดว่า "ขนาน" สำหรับรหัสต่อเนื่องที่ซับซ้อนซึ่งทำให้เกิดการขนานเช่นคุณจะพบในจาวาสคริปต์ของหน้าต่างเบราว์เซอร์ ดังนั้นเหตุผลที่ผู้คนในหัวข้อนี้พูดว่า "อะซิงโครนัสไม่มีส่วนเกี่ยวข้องกับความเท่าเทียม" ก็ทำได้ แต่อย่าสับสน
เกิดขึ้นพร้อมกัน:ไม่สามารถเกิดขึ้นพร้อมกันได้โดยไม่ต้องขนานกัน (ไม่ว่าจะจำลองหรือจริงตามที่อธิบายไว้ข้างต้น) แต่คำนี้มุ่งเน้นเฉพาะความจริงที่ว่าทั้งสองระบบจะพยายามเข้าถึงทรัพยากรเดียวกันในเวลาเดียวกัน มันให้ความสำคัญกับความจริงที่ว่าคุณจะต้องจัดการกับเรื่องนั้น
อะซิงโครนัส : ทุกคนพูดถูก ๆ ว่าอะซิงโครนัสนั้นไม่เกี่ยวข้องกับการขนาน แต่มันปูทางเอาไว้ (ภาระนั้นทำให้คุณต้องทำให้ขนานหรือไม่ - อ่านต่อไป)
"Asynchronous" หมายถึงการเป็นตัวแทนของการขนานที่เป็นทางการสามสิ่งพื้นฐานที่มักจะเกี่ยวข้องในการขนาน: 1) กำหนดงานเริ่มต้น (พูดเมื่อมันเริ่มและสิ่งที่ได้รับพารามิเตอร์) 2) สิ่งที่ต้องทำหลังจากเสร็จสิ้นและ 3) สิ่งที่รหัสควรทำต่อไปในระหว่าง
แต่ก็ยังคงเป็นเพียงไวยากรณ์ (โดยปกติจะแสดงเป็นวิธีการโทรกลับ) เบื้องหลังระบบที่อยู่เบื้องหลังอาจตัดสินใจว่าสิ่งที่เรียกว่า "งาน" เหล่านี้เป็นเพียงเศษเสี้ยวของรหัสที่จะกองพะเนินเทินทึกจนกว่าจะเสร็จสิ้นรหัสที่กำลังดำเนินการอยู่ในปัจจุบัน จากนั้นมันจะทำการ unpiles ทีละไฟล์และดำเนินการตามลำดับ หรือไม่. มันอาจสร้างเธรดต่องานและเรียกใช้งานแบบขนาน ใครสน? ส่วนนั้นไม่รวมอยู่ในแนวคิด;)
มีความหมายเล็กน้อยที่จะล้างที่นี่:
เห็นพ้องด้วยหรือขนานเป็นคำถามของการช่วงชิงทรัพยากรในขณะที่ไม่ตรงกันเป็นเรื่องเกี่ยวกับการควบคุมการไหล
ที่แตกต่างกันวิธีการ (หรือส่วนประกอบของพวกเขาการดำเนินงาน ) จะเรียกว่า Asynchronous เมื่อไม่มีการดำเนินการที่กำหนดในคำสั่งของพวกเขาในการประมวลผล ; กล่าวอีกนัยหนึ่งมีความเป็นไปได้ที่จะประมวลผลใด ๆ ในเวลาใดก็ได้ตามคำจำกัดความตัวประมวลผลหลายตัว (เช่นซีพียูหรือบุคคล) ทำให้สามารถประมวลผลหลายตัวพร้อมกันได้ บนโปรเซสเซอร์เดียวการประมวลผลของพวกเขาคือ interleaved (เช่นเธรด)
ขั้นตอนการดำเนินงานที่ไม่ตรงกันหรือจะเรียกว่าพร้อมกันเมื่อพวกเขาใช้ทรัพยากรร่วมกัน ; การเกิดขึ้นพร้อมกันคือความเป็นไปได้ที่แน่นอนของการแข่งขันในเวลาใดก็ตามที. Parallelism นั้นมีการรับประกันเล็กน้อยเมื่อไม่มีการแชร์ทรัพยากร (เช่นโปรเซสเซอร์และหน่วยเก็บข้อมูลที่แตกต่างกัน); ไม่เช่นนั้นการควบคุมภาวะพร้อมกันจะต้องได้รับการจัดการ
ดังนั้นกระบวนการหรือการดำเนินการแบบอะซิงโครนัสอาจถูกประมวลผลแบบขนานหรือพร้อมกันกับผู้อื่น
การเกิดขึ้นพร้อมกันหมายถึงการดำเนินงานหลายอย่างในเวลาเดียวกัน แต่ไม่จำเป็นต้องพร้อมกัน เมื่อคุณต้องทำงานมากกว่าหนึ่งงาน แต่คุณมีทรัพยากรเดียวเราก็จะไปด้วยกัน ในการเกิดขึ้นพร้อมกันของสภาพแวดล้อมแกนเดียวทำได้โดยการสลับบริบท
ความเท่าเทียมเป็นเหมือนการทำงานมากกว่าหนึ่งอย่างพร้อมกันเหมือนกับที่คุณสามารถร้องเพลงและอาบน้ำด้วยกัน ตอนนี้คุณกำลังทำงานแบบขนาน
อะซิงโครนัสเป็นสิ่งที่เกี่ยวข้องกับการประมวลผลเธรดในโมเดลอะซิงโครนัสเมื่อมีการเรียกใช้งานหนึ่งงานคุณสามารถสลับไปใช้งานอื่นโดยไม่รอให้งานก่อนหน้าเสร็จสิ้น
การเขียนโปรแกรมแบบอะซิงโครนัสช่วยให้เราบรรลุผลพร้อมกัน การเขียนโปรแกรมแบบอะซิงโครนัสในสภาพแวดล้อมแบบมัลติเธรดเป็นวิธีที่จะทำให้เกิดความขนาน
"Sync และ async เป็นแบบจำลองการเขียนโปรแกรมพร้อมกันและแบบขนานเป็นวิธีการทำงานของ ... " ที่มา: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66
กล่าวอีกนัยหนึ่งการซิงค์และ async อธิบายว่าโปรแกรมของคุณดำเนินการอย่างไรเมื่อทำการเรียกใช้ฟังก์ชัน (จะรอหรือจะดำเนินการต่อหรือไม่) ในขณะที่พร้อมกันและขนานจะอธิบายถึงวิธีการใช้งาน (งาน) พร้อมกัน ในเวลาเดียวกัน, parallel = ดำเนินการได้อย่างมีประสิทธิภาพในเวลาเดียวกัน)
ความสอดคล้อง VS การเปรียบเทียบ: การเกิดพร้อมกัน ณ จุดหนึ่งของเวลาสามารถทำได้เพียงหนึ่งงานเท่านั้น ตัวอย่าง: ซีพียูตัวประมวลผลแบบขนานเดียว ณ จุดหนึ่งเราสามารถทำงานหลายอย่าง ตัวอย่าง: โปรเซสเซอร์ dual-core หรือ multi-core
ที่นี่ฉันอธิบายด้วยตัวอย่าง
GPUใช้การประมวลผลแบบขนานที่จะดำเนินการบล็อกเดียวกันของรหัส (AKA เคอร์เนล ) ในพันของหัวข้อทางกายภาพและตรรกะ เป็นการดีที่กระบวนการเริ่มต้นและสิ้นสุดสำหรับเธรดทั้งหมดในเวลาเดียวกัน CPU แกนเดียวที่ไม่มีไฮเปอร์เธรดไม่สามารถทำการประมวลผลแบบขนานได้
หมายเหตุ:ฉันพูดอย่างยอดเยี่ยมเพราะเมื่อคุณรันเคอร์เนลที่มีขนาดการโทร 7M บนฮาร์ดแวร์ที่มีเธรด 6M จะต้องรันสองครั้งที่รันโค้ดเดียวกันบนเธรด 6M ทั้งหมดแบบขนานในขณะที่ใช้เธรด 6M ทั้งหมดในแต่ละครั้ง
หมายเหตุ: Parallelism ไม่ จำกัด เฉพาะ GPU
บริการเว็บได้รับการร้องขอขนาดเล็กจำนวนมากในเวลาจริงและจะต้องจัดการกับแต่ละคำขอเหล่านี้แตกต่างกันในเวลาใด ๆ และเป็นอิสระจากความต้องการอื่น ๆ หรืองานใด ๆ ภายใน แต่คุณต้องการให้บริการบนเว็บพร้อมทำงานตลอดเวลาโดยไม่ทำลายสถานะของข้อมูลหรือความสมบูรณ์ของระบบ
แค่คิดว่าผู้ใช้อัปเดตบันทึกและผู้ใช้รายอื่นลบบันทึกเดียวกันในเวลาเดียวกัน
หมายเหตุ : การร้องขอเหล่านี้มักใช้ทรัพยากรที่จำเป็นบางอย่างเช่นหน่วยความจำการเชื่อมต่อฐานข้อมูลหรือแบนด์วิดท์ แต่คุณต้องการให้บริการเว็บตอบสนองได้ตลอดเวลา อะซิงโครนัสเป็นกุญแจสำคัญในการตอบสนองไม่ใช่การทำงานพร้อมกัน
กระบวนการหนักหนึ่งกระบวนการ (เช่นการดำเนินการ I / O) สามารถบล็อก GUIได้อย่างง่ายดายหากทำงานบนเธรด GUI เพื่อรับประกันการตอบสนองของ UIกระบวนการที่หนักสามารถดำเนินการแบบอะซิงโครนัส มันจะดีกว่าที่จะทำงานที่คล้ายกันดำเนินงาน async หนึ่งที่เวลา เช่นการดำเนินการ IO หลายขอบเขตอาจช้าลงอย่างมากหากทำงานพร้อมกันดังนั้นจึงเป็นการดีกว่าที่จะจัดคิวให้เสร็จ
หมายเหตุ:การดำเนินการ async ซึ่งดำเนินการพร้อมกัน (เช่นมากกว่าหนึ่งครั้ง) เป็นการดำเนินการพร้อมกัน
หมายเหตุ: การเกิดพร้อมกันและไม่ตรงกันมักจะสับสนกัน การทำงานพร้อมกันหมายถึงส่วนต่าง ๆ ของระบบที่ทำงานร่วมกันโดยไม่รบกวนซึ่งกันและกัน (ปัญหาเหล่านี้มักจะถูกแก้ไขด้วยการล็อค, เซมาฟอร์หรือ mutexes) อะซิงโครนัสเป็นวิธีที่คุณบรรลุการตอบสนอง (เช่นเธรด)
* หมายเหตุ: Asynchronousy และ Multithreading มักจะสับสนซึ่งกันและกัน รหัสแบบอะซิงโครนัสไม่จำเป็นต้องเกี่ยวข้องกับเธรดใหม่ มันอาจเป็นการทำงานของฮาร์ดแวร์หรือตามที่สเตฟานเรียกมันว่าเป็นการดำเนินการที่แท้จริงอ่านนี่สิ
เช่นในรหัส WPF + C # ด้านล่างawait Task.Run(()=> HeavyMethod(txt))
กำลังแก้ปัญหาแบบอะซิงโครนัสในขณะที่ textBox.Dispatcher.Invoke
กำลังแก้ปัญหาที่เกิดขึ้นพร้อมกัน:
private async void ButtonClick(object sender, RoutedEventArgs e)
{
// run a method in another thread
await Task.Run(()=> HeavyMethod(txt));
// modify UI object in UI thread
txt.Text = "done";
}
// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
while (stillWorking)
{
// use Dispatcher to safely invoke UI operations
textBox.Dispatcher.Invoke(() =>
{
// UI operations outside of invoke will cause ThreadException
textBox.Text += ".";
});
}
}
ฉันจะทำให้มันสั้นและน่าสนใจที่จะห่อหัวของคุณรอบแนวคิดเหล่านี้
เกิดขึ้นพร้อมกันกับขนาน - งานวิธีที่จะดำเนินการ
ยกตัวอย่างในชีวิตจริง: มีความท้าทายที่ต้องให้คุณกินเค้กขนาดใหญ่และร้องเพลงทั้งเพลง คุณจะชนะถ้าคุณเป็นคนที่เร็วที่สุดที่ร้องเพลงทั้งเพลงและทำเค้กให้เสร็จ ดังนั้นกฎคือการที่คุณร้องเพลงและกินพร้อมกัน วิธีการที่คุณไม่ได้อยู่ในกฎ คุณสามารถกินเค้กทั้งหมดแล้วร้องเพลงทั้งเพลงหรือกินเค้กครึ่งเค้กจากนั้นร้องเพลงครึ่งเพลงจากนั้นทำอีกครั้ง ฯลฯ
Parallelismเป็นประเภทของภาวะพร้อมกันที่เฉพาะเจาะจงซึ่งงานจะถูกดำเนินการพร้อมกันจริงๆ ในวิทยาการคอมพิวเตอร์ความเท่าเทียมสามารถเกิดขึ้นได้ในสภาพแวดล้อมแบบมัลติคอร์เท่านั้น
ซิงโครนัส vs. อะซิงโครนัส - โมเดลโปรแกรมมิง
ในการซิงค์คุณเขียนรหัสเป็นขั้นตอนที่ดำเนินการตามลำดับจากบนลงล่าง ในรูปแบบการเขียนโปรแกรม async คุณเขียนโค้ดเป็นงานซึ่งจะถูกดำเนินการพร้อมกัน การดำเนินการพร้อมกันหมายความว่างานทั้งหมดจะถูกดำเนินการในเวลาเดียวกัน