Stack : 가장 최근의 데이터가 필요할 떄!
Queue(dequeue) : 1.가장 이전의 데이터가 필요할 때!
2.무언가를 대기시키고 싶을 때!(ex. Ready Queue, Waiting Queue)
(아래는 JAVA를 기준으로 설명을 하였다.)
Stack과 관련된 에러
1. stackoverflow : 할당된 스택 메모리가 다 찼을 떄!!
-> 거의 대부분 재귀함수 떄문에 발생
Queue와 관련된 에러
1. OutOfMemory
-> JAVA에서 Heap 메모리를 다 썼을 때 발생
-> Queue에 데이터가 쌓이기만 해서, heap 메모리를 다 잡아 먹어 버리면 발생
Solution : Queue의 사이즈를 고정시킨다.
Q. 그럼 고정된 사이즈가 다 찼을 때는 어떻게 처리를 해 줘야 할까?
A.1. 예외(Exception) 던져서 실행의 흐름을 바꿈.2. null, false와 같은 특별한 값을 던져서 감지.3. Queue에 빈 공간이 생길 떄까지, 해당 스레드를 block시킨다.( 해당 스레드는 waiting 상태가 되므로, 시간을 낭비하는 issue가 생긴다.)4. Queue에 빈 공간이 생길 때까지 무작정 block을 시키는 것이 아니라, block에 timeout을 설정하고 timeout이 지났음에도 빈 공간이 생기지 않는다면, 걍 포기!!
JAVA에서는 위 1~4를 모두 사용할 수 있도록, LinkedBlockingQueue라는 Class가 구현이 되어 있다.
'CS 과목(CS科目) > 자료 구조(Data Structure)' 카테고리의 다른 글
DB Index에서 사용되는 B tree(데이터 삽입) (0) | 2023.03.10 |
---|---|
Deque(덱) (0) | 2023.01.20 |
원형 큐(Circular Queue)를 사용하는 이유!!! (0) | 2023.01.15 |
Stack, Queue, List, set 등의 자료구조 사용 시 주의 사항 (0) | 2023.01.13 |
기술 문서에서 Queue라는 용어를 만났을 때의 주의점 (0) | 2023.01.13 |