stackoverflow : queue vs deque
큐에 대해서 공부하려고 구글링해보니 다양한 구현 방법이 존재하는 것을 확인하였다. 단순히 list
로 구현하는 방법부터 Circular array
를 사용하는 방법까지.
그 중 의문을 갖게 하는 부분이 있었다.
파이썬에는 queue라는 모듈이 존재하는데 왜 굳이 deque을 쓸까?
이러한 의문에서 queue
와 deque
의 공식 문서 및 차이점을 살펴보았고 알게 된 점을 간단하게나마 기록해보기로 했다.
python document : queue
공식 문서의 정의에 따르면
The queue module implements multi-producer, multi-consumer queues.
It is especially useful in threaded programming when information must be exchanged safely between multiple threads.
The Queue class in this module implements all the required locking semantics.
It depends on the availability of thread support in Python; see the threading module.
직역하자면
queue module은 다중 생산자 / 소비자의 queue를 실행한다.
특히 정보가 여러 개의 스레드 간에 안전하게 교환되어야 하는 스레드 프로그래밍에서 사용된다.
이 모듈의 Queue 클래스는 필요한 모든 locking 과정들을 실행한다.
이것은 Python의 thread support가 가능함에 의존한다.
즉, queue
는 멀티 스레드 환경에서 스레드 간의 안전한(thread-safe)한 소통을 위해 만들어진 라이브러리이다.
queue
에서 활용 가능한 메소드들을 보면 이를 확인할 수 있다.
from queue import Queue
queue = Queue()
dir(queue)
위 코드를 통해 살펴보면 단순한 put
, get
외에도 put_nowait
, get_nowait
, task_done
, join
등의 멀티 스레드 환경에서 사용되는 메소드들이 존재하는 것을 확인할 수 있다.
python document : deque
queue
와 달리 deque
는 파이썬의 자료구조의 일종이다.
Why? deque
은 collections
라이브러리에서 import 되는데 이 collections
라이브러리는 container datatype
이다.
공식 문서에서도 deque
은 list
와 비슷하게 동작하지만, 그 연산의 복잡도에 있어 deque
이 더 빠르게 동작하도록 설계되어 있다고 한다. (양 방향 입출력 모두 O(1)
)
엄청나게 복잡하고 대단한 개념은 아니지만 그래도 평소에 신경쓰지 못했던 부분을 공부하고 나니 머리 속이 채워지는 느낌이 든다!