Skip to main content

การเขียนโปรแกรมสัญญาณคืออะไร?

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

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

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

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

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