달력

2

« 2025/2 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
2011. 11. 8. 12:23

deque(덱), 작업 가로채기 JAVA이야기2011. 11. 8. 12:23

deque(디큐라고 읽는거 아냐?)->덱이라고 읽는다.
deque [dék] play
데크, 데큐 ((양끝의 어느 쪽에서든 데이터의 출입이 가능한 데이터 행렬))

자바 6.0에서 추가됨
deque과 blockingQueue는 각각 queue와 blockingQueue를 상속받은 클래스이다.

BlockingQueue-> ArrayBlockingQueue, LinkedBlockingQueue
BlockingDeque-> ArrayBlockingDeque, LinkedBlockingDeque

작업 가로채기(work stealing)라는 패턴을 적용할 때에는 덱을 그래도 가져다 사용할 수 있다.
producer -consumer 패턴에서는 모든 컨슈머가 하나의 큐를 공유해 사용한다. 하지만 작업 가로채기 패턴에서는 모든 컨슈머가 각자의 덱을 갖는다. 만약 특정 컨슈머가 자신의 덱에 들어있던 작업을 모두 처리하고 나면 다른 컨슈머의 덱에 쌓여있는 작업 가운데 맨뒤에 추가된 작업을 가로채 가져올 수 있다.
  만약 특정 컨슈머가 자신의 덱에 들어있던 작업을 모두 처리하고 나면 다른 컨슈머의 덱에 쌓여있는 작업 가운데 맨 뒤에 추가된 작업을 가로채 가져올 수 있다.(와우....)
작업 가로채기 패턴은 그 특성상 컨슈머가 하나의 큐를 바라보면서 서로 작업을 가져가려고 경쟁하기 않기 때문에 일밙겅니 프로듀서 - 컨슈머 패턴보다 규모가 큰 시스템을 구현하기에 적당하다.
더군다나 컨슈머가 다른 컨슈머의 큐에서 작업을 가져오려 하는 경우에도 앞이 아닌 맨 뒤의 작업을 가져오기 때문에 맨 앞의 작업을 가져가려는 원래 소유자와 경쟁이 일어나지 않는다. 

작업 가로채기 패턴은
또한 컨슈머가 프로듀서의 역할을 갖고 있는 경우에 적용하기에 좋은데, 이를테면 하나의 작업을 처리하고 나면 더 많은 작업이 생길 수 있는 상황을 생각해 볼 수 있다. 예를들어, 웹 크롤러가 웹페이지를 하나 처리하고 나면 따라가야 할 또 다른 링크가 여러 개 나타날 수 있기 때문이다. 이와 유사하게 가비지 컬렉션 도중에 힙을 마킹하는 작업과 같이 대부누의 그래프 탐색 알고리즘을 구현 할 때 작업 가로채기 패턴을 적용하면 멀티 스레드를 사용해 손쉽게 병렬화할 수 있다.
 

'JAVA이야기' 카테고리의 다른 글

POSION OBJECT  (0) 2011.11.08
FutureTask<V>  (0) 2011.11.08
블로킹큐  (0) 2011.11.08
동기화 Collection클래스  (0) 2011.11.07
Java Pattern Group 사용하기  (0) 2011.11.05
:
Posted by НooпeУ


Code Start Code End