[자료구조] Queue vs deque

김학재·2020년 11월 10일
1

자료구조

목록 보기
4/6
post-thumbnail

stackoverflow : queue vs deque
큐에 대해서 공부하려고 구글링해보니 다양한 구현 방법이 존재하는 것을 확인하였다. 단순히 list로 구현하는 방법부터 Circular array를 사용하는 방법까지.

그 중 의문을 갖게 하는 부분이 있었다.
파이썬에는 queue라는 모듈이 존재하는데 왜 굳이 deque을 쓸까?
이러한 의문에서 queuedeque의 공식 문서 및 차이점을 살펴보았고 알게 된 점을 간단하게나마 기록해보기로 했다.


queue

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 등의 멀티 스레드 환경에서 사용되는 메소드들이 존재하는 것을 확인할 수 있다.

deque

python document : deque
queue와 달리 deque는 파이썬의 자료구조의 일종이다.
Why? dequecollections 라이브러리에서 import 되는데 이 collections 라이브러리는 container datatype이다.

공식 문서에서도 dequelist와 비슷하게 동작하지만, 그 연산의 복잡도에 있어 deque이 더 빠르게 동작하도록 설계되어 있다고 한다. (양 방향 입출력 모두 O(1))


엄청나게 복잡하고 대단한 개념은 아니지만 그래도 평소에 신경쓰지 못했던 부분을 공부하고 나니 머리 속이 채워지는 느낌이 든다!

profile
YOU ARE BREATHTAKING

0개의 댓글