20 điểm bởi xguru 2025-11-11 | 2 bình luận | Chia sẻ qua WhatsApp
  • Tiện ích để triển khai hệ thống hàng đợi tác vụ nhẹ hoạt động không cần cấu hình hay daemon riêng
  • Hỗ trợ Linux/MacOS - có thể chạy trên các hệ thống tương thích POSIX nếu hỗ trợ flock(2)
  • Hỗ trợ xếp hàng tác vụ tạm thời trên dòng lệnh (ad-hoc queuing)
    • Phù hợp cho các tác vụ tuần tự như build Makefile, tải file, chạy benchmark
    • Cũng có thể dùng thay cho nohup
  • Thứ tự tác vụ được đảm bảo nghiêm ngặt bằng đồng bộ hóa dựa trên timestamp đơn vị ms
    • Tạo TIMESTAMP.PID cho từng tiến trình rồi dùng flock (khóa file)
    • Khi các flock phía trước được mở khóa thì job tiếp theo sẽ bắt đầu
    • Vì đồng bộ hóa được thực hiện ở cấp hệ thống file nên không cần polling
  • Khi thêm tác vụ theo dạng nq CMDLINE..., công cụ sẽ in ra ID tác vụ rồi chạy ở chế độ nền
    • STDOUT/STDERR được chuyển hướng vào file log
    • Có thể phân biệt trực quan trạng thái tác vụ bằng bit thực thi (+x) của file log
  • Phần mở rộng tên file log được tạo từ PID, giúp quản lý tác vụ thuận tiện
    • Trước khi chạy là PID của nq, sau khi chạy sẽ đổi thành PID của tác vụ thực tế
    • Có thể chạy file log như shell script để chạy lại tác vụ

Khác biệt với at, batch, task-spooler

  • at
    Công cụ chạy tác vụ vào thời điểm đã chỉ định
    Thực thi lệnh tại thời gian đã lên lịch dựa trên đồng hồ hệ thống, chủ yếu dùng cho các tác vụ lên lịch một lần
  • batch
    Chạy tác vụ khi mức tải hệ thống (load average) thấp
    Mục đích là điều khiển thực thi dựa trên tải hơn là lên lịch, và được quản lý bởi daemon
  • task-spooler
    Tự động chạy daemon để quản lý queue và hỗ trợ xử lý tác vụ tuần tự hoặc song song
    Có thể chỉ định số lượng tác vụ tối đa chạy đồng thời
    Có thể cấu hình queue khác nhau theo từng terminal, đồng thời truy vấn trạng thái của từng queue bằng lệnh
  • nq
    Hoạt động không cần daemon, chỉ đơn giản quản lý queue bằng flock (khóa hệ thống file) ở cấp thư mục
    Không xét đến tải hệ thống hay thời điểm lên lịch, mà chỉ đơn thuần đảm bảo thứ tự tác vụ
    Có thể theo dõi log của queue theo thời gian thực bằng nqtail
    Vì mỗi thư mục hoạt động như một queue độc lập, có thể tách riêng nhiều queue bằng biến môi trường $NQDIR

2 bình luận

 
rtyu1120 2025-11-11

Style code trông quá kiểu Sourceforge thời xưa nên tôi còn tưởng mình vừa quay ngược về quá khứ ấy chứ hahaha

 
euphcat 2025-11-11

So với thời Sourceforge thì tôi đúng là một lập trình viên còn non lắm, nên ban đầu đã tự hỏi “đó là ý gì nhỉ?”, nhưng rồi thấy có xuống dòng giữa kiểu trả về của hàm và tên hàm nên lập tức hiểu ra luôn o.o

Không biết trong đoạn mã đó còn có điểm nào khác cho thấy phong cách lập trình kiểu cũ nữa không?