กลับไปหน้าบทความ

อ่าน 3 นาที

ช่อง (การจัดรายการ)

ในทางคอมพิวเตอร์ แชนเนล เป็นแบบจำลองสำหรับ การสื่อสาร และ การซิงโครไนซ์ ระหว่างกระบวนการ ผ่าน การส่งข้อความ ข้อความสามารถส่งผ่านแชนเนลได้...

ช่อง (การจัดรายการ)

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

ช่อง libthread

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

กิจกรรม OCaml

โมดูล event ของ OCamlมีช่องสัญญาณแบบกำหนดประเภทสำหรับการซิงโครไนซ์ เมื่อฟังก์ชัน send และ receive ของโมดูลถูกเรียกใช้ จะสร้างเหตุการณ์ send และ receive ที่สอดคล้องกัน ซึ่งสามารถใช้ในการซิงโครไนซ์ได้

ตัวอย่าง

ลัว เลิฟ2ดี

ไลบรารีLove2Dซึ่งใช้ ภาษาโปรแกรม Lua นั้น มีการใช้งานแชนเนลด้วยการดำเนินการแบบ push และ pop คล้ายกับสแต็ก การดำเนินการ pop จะบล็อกตราบใดที่ยังมีข้อมูลอยู่ในสแต็ก การดำเนินการ demand นั้นเทียบเท่ากับการดำเนินการ pop แต่จะบล็อกจนกว่าจะมีข้อมูลอยู่ในสแต็ก

-- สตริงที่มีโค้ดซึ่งจะถูกตีความโดยฟังก์ชัน เช่น loadstring() -- แต่ในฝั่งภาษา C จะใช้เพื่อเริ่มต้นเธรดแบบเนทีฟรหัสเธรดท้องถิ่น= [[  love.thread.getChannel("test"):push("Hello world!") ]]function love.load () -- เริ่มเธรดthread = love.thread.newThread ( threadCode ) thread : start () -- เธรดจะหยุดรอจนกว่าข้อความ "Hello world!" จะถูกดึงออกจากสแต็กของช่อง test -- เนื่องจากช่องอาจถูกดึงออกไปก่อนที่เธรดจะเริ่มทำงานครั้งแรก จึงอาจไม่มีข้อมูลอยู่ในสแต็ก-- ในกรณีนั้น ให้ใช้ :demand() แทน :pop() เพราะ :demand() จะหยุดรอจนกว่าจะมีข้อมูลอยู่ในสแต็กแล้วจึงส่งข้อมูลกลับมาprint ( love.thread.getChannel ( "test" ) : demand ()) -- ตอนนี้เธรดสามารถสิ้นสุดการทำงานได้แล้วend

XMOS XC

ภาษาการเขียนโปรแกรมXMOS XCมีประเภทพื้นฐาน "Chan" และตัวดำเนินการสองตัวคือ "<:" และ ":>" สำหรับการส่งและรับข้อมูลจากช่องสัญญาณ[ 1 ]

ในตัวอย่างนี้ มีการเริ่มเธรดฮาร์ดแวร์สองเธรดบน XMOS โดยรันสองบรรทัดในบล็อก "par" บรรทัดแรกส่งค่า 42 ผ่านช่องสัญญาณ ในขณะที่บรรทัดที่สองรอจนกว่าจะได้รับค่าและกำหนดค่าให้กับ x ภาษา XC ยังอนุญาตให้รับข้อมูลแบบอะซิงโครนัสบนช่องสัญญาณผ่านคำสั่ง select ได้อีกด้วย

ชาน; อินท์x ; พาร์{ c <: 42 ; :> x ; }

ไป

โค้ด Goส่วนนี้ทำงานคล้ายกับโค้ด XC ขั้นแรกจะสร้างช่องสัญญาณ c จากนั้น จะสร้าง goroutineที่ส่งค่า 42 ผ่านช่องสัญญาณ เมื่อใส่ตัวเลขลงในช่องสัญญาณ x จะถูกตั้งค่าเป็น 42 Go อนุญาตให้ช่องสัญญาณบัฟเฟอร์เนื้อหาได้ เช่นเดียวกับการรับข้อมูลแบบไม่บล็อกโดยใช้บล็อก select [ 2 ]

c := make ( chan int )go func () { c <- 42 }()x := <- c

สนิม

Rustจัดเตรียมช่องทางการสื่อสารแบบอะซิงโครนัสระหว่างเธรด ช่องทางเหล่านี้อนุญาตให้มีการไหลของข้อมูลแบบทิศทางเดียวระหว่างสองจุดสิ้นสุดได้แก่Senderและ[ 3Receiver ]

ใช้std :: sync :: mpsc ; ใช้std :: thread ;fn main () { let ( tx , rx ) = mpsc :: channel ();thread :: spawn ( move || { tx.send ( 123 ) .unwrap ( ); } );let result = rx.recv ( ); println! ( "{:?}" , result ) ; }

แอปพลิเคชัน

นอกจากการใช้งานพื้นฐานสำหรับการสื่อสารระหว่างกระบวนการแล้ว แชนเนลยังสามารถใช้เป็นองค์ประกอบพื้นฐานเพื่อนำโครงสร้างการเขียนโปรแกรมแบบขนานอื่นๆ มาใช้ ซึ่งสามารถสร้างเป็นสตรีมได้ ตัวอย่างเช่น แชนเนลสามารถใช้สร้างฟิวเจอร์และโพรมีน ได้ โดยที่ฟิวเจอร์คือแชนเนลที่มีองค์ประกอบเดียว และโพรมีนคือกระบวนการที่ส่งไปยังแชนเนลเพื่อเติมเต็มฟิวเจอร์[ 4 ] ในทำนอง เดียวกันสามารถสร้างตัววนซ้ำ ได้โดยตรงจากแชนเนล [ 5 ]

รายการการใช้งาน

รายชื่อการใช้งานช่องสัญญาณที่ไม่เป็นมาตรฐานและอิงตามไลบรารี

  • สำหรับ Scala:
    • CSO -- Communicating Scala Objects [ 6 ]เป็น DSL ที่สมบูรณ์สำหรับการสื่อสารและการทำงานพร้อมกันแบบอิงช่องสัญญาณ ซึ่งพรีมิทีฟเชิงความหมายเป็นการวางนัยทั่วไปของพรีมิทีฟ OCCAM CSO ถูกนำมาใช้ตั้งแต่ปี 2007 ในการสอนการเขียนโปรแกรมพร้อมกัน และสามารถค้นหาการบรรยายที่เกี่ยวข้องได้โดยใช้การใช้งาน ThreadCSO [ 7 ]
  • สำหรับภาษา C++:
    • stlab [ 8 ]การใช้งานนี้รองรับการแบ่ง การรวม และการดำเนินการซิปที่แตกต่างกัน ตัวดำเนินการที่แตกต่างกันสามารถแนบกับโหนดแต่ละโหนดได้
  • สำหรับ Rust:
  • การใช้งานช่องทาง Libthread
  • Bell Labs และ CSP Threads
  • ลิมโบ – การเขียนโปรแกรมแอปพลิเคชันอินเฟอร์โน
  • Stackless.com – ช่องทางต่างๆ
  • – กิจกรรม OCaml
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Channel_(programming)&oldid=1328783440 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ช่อง (การจัดรายการ)

ในทางคอมพิวเตอร์ แชนเนล เป็นแบบจำลองสำหรับ การสื่อสาร และ การซิงโครไนซ์ ระหว่างกระบวนการ ผ่าน การส่งข้อความ ข้อความสามารถส่งผ่านแชนเนลได้...

ช่อง libthread

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

กิจกรรม OCaml

โมดูล event ของ OCaml มีช่องสัญญาณแบบกำหนดประเภทสำหรับการซิงโครไนซ์ เมื่อฟังก์ชัน send และ receive ของโมดูลถูกเรียกใช้ จะสร้างเหตุการณ์ send และ receive ที่สอดคล้องกัน ซึ่งสามารถใช้ในการซิงโครไนซ์ได้

ลัว เลิฟ2ดี

ไลบรารี Love2D ซึ่งใช้ ภาษาโปรแกรม Lua นั้น มีการใช้งานแชนเนลด้วยการดำเนินการแบบ push และ pop คล้ายกับสแต็ก การดำเนินการ pop จะบล็อกตราบใดที่ยังมีข้อมูลอยู่ในสแต็ก การดำเนินการ demand นั้นเทียบเท่ากับการดำเนินการ pop แต่จะบล็อกจนกว่าจะมีข้อมูลอยู่ในสแต็ก