แผนภาพ UML ของแอปพลิเคชันแบบมัลติเธรด


25

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

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

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

ฉันอยากรู้ว่า:

  1. ไดอะแกรมชนิดใดที่คุณพบว่ามีประโยชน์มากที่สุดในการทำความเข้าใจแอปพลิเคชันแบบมัลติเธรด
  2. มีส่วนขยายใด ๆ กับ UML แบบคลาสสิกที่คำนึงถึงลักษณะเฉพาะของแอพพลิเคชั่นแบบมัลติเธรดเช่นผ่านคำอธิบายประกอบที่แสดงให้เห็นว่า
    • วัตถุบางอย่างอาจอาศัยอยู่ในเธรดที่แน่นอนในขณะที่วัตถุอื่นไม่มีความสัมพันธ์ของเธรด
    • บางฟิลด์ของวัตถุอาจถูกอ่านจากเธรดใดก็ได้ แต่เขียนไปจากอันเดียวเท่านั้น
    • วิธีการบางอย่างจะซิงโครนัสและส่งคืนผลลัพธ์ในขณะที่วิธีอื่น ๆ แบบอะซิงโครนัสที่รับคำขอเข้าคิวและส่งคืนผลลัพธ์เช่นผ่านการติดต่อกลับบนเธรดอื่น

2
ฉันพบแผนภาพกิจกรรมที่มีประโยชน์สำหรับการสร้างแบบจำลอง (โดยทั่วไป) กรณี / กระบวนการใช้พร้อมกัน แต่ไม่เหมาะจริง ๆ หากคุณต้องการลงไปที่คลาส / ระดับวัตถุ
PéterTörök

คำตอบ:


12

ความเข้าใจที่สำคัญที่สุดเกี่ยวกับวิธีการประหารชีวิตเกิดขึ้นด้ายสามารถบรรยายโดยสิ่งที่เรียกว่าแผนภาพลำดับ นี่คือตัวอย่างจากวิกิพีเดีย

ป้อนคำอธิบายรูปภาพที่นี่

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

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

มีแผนภาพประเภทอื่นเช่นแผนภาพการโต้ตอบและแผนภาพการสื่อสารแต่ฉันคิดว่าการพยายามวาดแผนภาพลำดับและแผนภาพสถานะจะทำให้ความชัดเจนสูงสุด


6

คำตอบของฉันเป็นส่วนเสริมของ Dipanซึ่งเกี่ยวข้องกับแผนภาพลำดับ UML ฉันพบว่าสไตล์ที่ไม่บริสุทธิ์ 100% UML ก็โอเคเช่นกัน ลองดูที่แผนภาพที่ใช้ในรูปแบบพร้อมกัน บางตัวคล้ายกับ UML (แต่อันนี้ไม่ได้มาตรฐาน):

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณคุ้นเคยกับการรอ / แจ้งเตือนในการซิงโครไนซ์เธรด Java คุณจะประทับใจกับแผนภาพลำดับต่อไปนี้จากเอกสารที่ฉันกล่าวถึง:

ป้อนคำอธิบายรูปภาพที่นี่


นอกจากนี้ยังสามารถใช้กับ. NET / C # และ Visual Studio มีเครื่องมือ UML ลำดับไดอะแกรมในตัวรวมถึงการควบคุมประเภทชิ้นส่วนการไหลเพื่ออธิบายพฤติกรรมแบบมัลติเธรด ดูmsdn.microsoft.com/en-us/library/dd465153.aspx#Anchor_1
David Burg

0

สำหรับแอ็พพลิเคชันแบบมัลติเธรดที่ใช้คลาสเดียวกันเคล็ดลับอาจลากและปล่อยคลาสเดียวกันลงในแต่ละโมเดลที่แทนเธรด คุณจะสามารถมีคลาสเดียวกันกับมุมมองที่แตกต่างกันและนำทางในรูปแบบและรหัสโดยคลิกที่คลาสไดอะแกรมหรือรหัส ฉันรู้ว่าโมเดลผสานไม่ใช่แนวคิดที่รู้จักกันดี แต่ทำงานได้ดีภายใน Eclipse กับ Omondo

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

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

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