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

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

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

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

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

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