728x90
안녕하세요,
오늘은 SplPriorityQueue를 활용하여 작업 목록 중 중요 작업 먼저 처리하는 방법을 알아보겠습니다.
SplPriorityQueue
일반적인 대기열(Queue)은 선입선출(FIFO) 방식으로 작업을 처리합니다.
하지만 '긴급 문의'처럼 다른 것보다 먼저 처리해야 할 중요한 작업이 있는 경우, SplPriorityQueue를 사용하여 먼저 처리할 수 있습니다.
SplPriorityQueue는 PHP의 SPL(Standard PHP Library)이 제공하는 자료구조입니다.
데이터를 큐에 넣을(insert) 때, 데이터와 함께 '우선순위'를 숫자로 지정할 수 있습니다.
데이터를 꺼낼(extract) 때 SplPriorityQueue는 들어온 순서와 상관없이, 지정된 우선순위가 가장 높은 데이터를 먼저 돌려줍니다.
예시
- 일반 큐 (SplQueue) 동작 방식
먼저 일반적인 큐의 동작을 보겠습니다. 들어간 순서 그대로 나오는 것을 확인할 수 있습니다.
<?php
$queue = new SplQueue();
// 큐에 데이터를 순서대로 넣음
$queue->enqueue('[일반] 뉴스레터 발송');
$queue->enqueue('[긴급] 서버 장애 알림');
$queue->enqueue('[일반] 광고 이메일 전송');
echo "--- 일반 큐 작업 처리 순서 ---\n";
while (!$queue->isEmpty()) {
echo "처리: " . $queue->dequeue() . "\n";
}
?>
- SplPriorityQueue로 중요 작업 먼저 처리하기
SplPriorityQueue는 데이터를 넣을 때 insert('데이터', 우선순위) 형태로 두 번째 인자에 우선순위를 지정합니다. 숫자가 클수록 우선순위가 높습니다.
<?php
$priorityQueue = new SplPriorityQueue();
// insert('데이터', 우선순위)
$priorityQueue->insert('[일반] 뉴스레터 발송', 10);
$priorityQueue->insert('[긴급] 서버 장애 알림', 100); // 가장 높은 우선순위
$priorityQueue->insert('[일반] 광고 이메일 전송', 1);
echo "\n--- 우선순위 큐 작업 처리 순서 ---\n";
while ($priorityQueue->valid()) {
echo "처리: " . $priorityQueue->current() . "\n";
$priorityQueue->next();
}
?>
실행 결과
SplPriorityQueue는 넣은 순서와 관계없이 '긴급' 작업을 가장 먼저 처리하는 것을 확인할 수 있습니다.
- 일반 큐(SplQueue) 결과:
--- 일반 큐 작업 처리 순서 ---
처리: [일반] 뉴스레터 발송
처리: [긴급] 서버 장애 알림
처리: [일반] 광고 이메일 전송
- 우선순위 큐(SplPriorityQueue) 결과:
--- 우선순위 큐 작업 처리 순서 ---
처리: [긴급] 서버 장애 알림
처리: [일반] 뉴스레터 발송
처리: [일반] 광고 이메일 전송'PHP' 카테고리의 다른 글
| [PHP] match 표현식 (0) | 2025.10.20 |
|---|---|
| [PHP] SplMaxHeap 가장 큰 값이 항상 맨 위에 위치하는 자료구조 (0) | 2025.10.19 |
| [PHP] MultipleIterator 와 foreach로 여러 배열 동시에 반복하기 (0) | 2025.10.15 |
| [PHP] 숫자 내장 함수: number_format, round, rand 함수 (0) | 2025.10.13 |
| [PHP] ... (스프레드 연산자) 배열 병합 및 함수 인자 전달 (0) | 2025.10.05 |