20 คะแนน โดย xguru 2025-11-11 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • ยูทิลิตีสำหรับสร้าง ระบบคิวงานน้ำหนักเบาที่ทำงานได้โดยไม่ต้องมีการตั้งค่าหรือเดมอนแยกต่างหาก
  • รองรับ Linux/MacOS - สามารถใช้งานได้บนระบบที่เข้ากันได้กับ POSIX และรองรับ flock(2)
  • รองรับ การจัดคิวงานเฉพาะกิจ (ad-hoc queuing) ผ่านบรรทัดคำสั่ง
    • เหมาะกับงานที่ต้องรันตามลำดับ เช่น การ build ด้วย Makefile, การดาวน์โหลดไฟล์, การรัน benchmark
    • ใช้แทน nohup ได้เช่นกัน
  • ลำดับงานถูก รับประกันอย่างเคร่งครัดผ่านการซิงก์ด้วย timestamp ระดับมิลลิวินาที
    • สร้าง TIMESTAMP.PID สำหรับแต่ละโปรเซสและใช้ flock (file lock)
    • เมื่อ flock ก่อนหน้าถูกปลดล็อก จึงเริ่มงานถัดไป
    • เนื่องจากซิงก์กันในระดับไฟล์ซิสเต็ม จึง ไม่จำเป็นต้อง polling
  • เมื่อเพิ่มงานเข้าคิวด้วยรูปแบบ nq CMDLINE... จะพิมพ์ job ID แล้วรันในพื้นหลัง
    • STDOUT/STDERR จะถูก redirect ไปยังไฟล์ล็อก
    • สามารถ แยกสถานะงานด้วยภาพได้อย่างชัดเจน ผ่าน execution bit (+x) ของไฟล์ล็อก
  • นามสกุลชื่อไฟล์ล็อกประกอบด้วย PID ทำให้จัดการงานได้สะดวก
    • ก่อนเริ่มรันจะใช้ PID ของ nq และหลังเริ่มรันจะเปลี่ยนเป็น PID ของงานจริง
    • สามารถรันไฟล์ล็อกเหมือน shell script เพื่อ รันงานเดิมซ้ำได้

ความแตกต่างจาก at, batch, task-spooler

  • at
    เครื่องมือสำหรับ รันงานตามเวลาที่กำหนด
    จะเรียกคำสั่งในเวลาที่ตั้งไว้ตามนาฬิการะบบ และมักใช้กับงานแบบตั้งเวลาครั้งเดียว
  • batch
    จะรันงานเมื่อ ภาระของระบบ (load average) ต่ำ
    จุดประสงค์คือ ควบคุมการรันตามภาระระบบ มากกว่าการตั้งเวลา และมีเดมอนคอยจัดการ
  • task-spooler
    รองรับ การประมวลผลงานแบบลำดับหรือแบบขนาน โดย รันเดมอนที่ใช้จัดการคิวโดยอัตโนมัติ
    สามารถกำหนด จำนวนงานสูงสุดที่รันพร้อมกัน ได้
    ตั้งคิวแยกตามแต่ละเทอร์มินัล ได้ และตรวจสอบสถานะของแต่ละคิวผ่านคำสั่งได้
  • nq
    ทำงานได้โดยไม่ต้องมีเดมอน และจัดการคิวด้วย file system lock (flock) ในระดับไดเรกทอรี เท่านั้น
    ไม่พิจารณาภาระของระบบหรือเวลานัดหมาย แต่เน้น รับประกันลำดับของงาน อย่างเรียบง่าย
    ดูล็อกของคิวแบบเรียลไทม์ได้ด้วย nqtail
    แต่ละไดเรกทอรีทำหน้าที่เป็นคิวอิสระ จึงสามารถแยกใช้งานหลายคิวได้ด้วยตัวแปรแวดล้อม $NQDIR

2 ความคิดเห็น

 
rtyu1120 2025-11-11

สไตล์โค้ดดูเก่ามากจนเป็นสไตล์ Sourceforge ยุคโบราณเลย ผมนึกว่าตัวเองย้อนเวลากลับไปแล้วซะอีก 555

 
euphcat 2025-11-11

ถ้าเทียบกับยุค Sourceforge ก็ยังเป็นนักพัฒนาตัวจิ๋วอยู่ แต่ตอนแรกก็คิดว่า "หมายความว่าอะไรนะ?" ก่อนจะพอเห็นว่ามีการขึ้นบรรทัดใหม่ระหว่างชนิดค่าที่ฟังก์ชันคืนกับชื่อฟังก์ชัน ก็เข้าใจเลยครับ o.o

ไม่ทราบว่าในโค้ดนั้นยังมีจุดไหนที่ดูออกว่าเป็นสไตล์การเขียนโค้ดแบบเก่าอีกบ้างไหมครับ?