2022-01-08

1/9 자바 병렬 프로그래밍 3

 - 프로듀서 컨슈머 패턴: 블로킹 큐를 이용하면 좀더 편하게 구현할 수 있다

재사용성이 높아지고 성능의 측면에서도 이득을 볼 수 있다. 프로듀서가 디스크, 네트워크 i/o에 시간을 많이 소비하고 컨슈머가 cpu를 많이 소비한다면- 둘 클래스로 분리, 단일 스레드에서 순차적으로 실행하는 것보다 성능이 크게 높아질 수 있다. 

- 객체풀: 풀 내부에 소유하고 있던 객체를 외부에 공개할 때 적절한 동기화 작업이 되어있고, 그와 함께 풀에서 객체를 빌려다 사용하는 스레드 역시 외부에 공개하지 않는다. 적절하게 소유권이 이전되며. 새로운 스레드 내부에 객체가 완전히 한정된다. 

- 작업 가로채기 패턴 : 컨슈머가 각자 덱을 가지며, 자신의 덱이 비었을 경우 다른 컨슈머의 덱을 살펴보고 맨 뒤에있는 작업을 자기 덱으로 가져온다. 맨뒤에있는 것을 가져오기때문에 해당 덱의 원 소유자와 경쟁이 생기지 않으며 규모가 큰 시스템에서 적절하다 . 컨슈머가 여러가지 작업을 해야 하는 경우 작업에 작업이 꼬리를 물며 쌓일수있는데 이러한 경우에 적합하다. 

- 블로킹: i/o를 기다리거나, 락이 해제되기를 기다리거나, sleep등에 걸리거나 -> waiting, blocked , timed-waiting 상태에 들어간다. 


- interrupt : 여러 스레드가 협력하며 작업하기 위한 방법. 강제로 멈추는 것이 아니라 중단을 '요청'한다. 


- 세마포어 활용 : connection풀 관리 - 컬렉션의 크기에 제한을 두고 . 남은 객체가 없을 때 다른 스레드가 확보했던 객체를 반납받아 사용할 수 있을 때까지 대기하도록 할수있다. 

- BoundedHashset : 컬렉션 크기가 가질 수 있는 최대 크기로 세마포어를 초기화 한다. add하기 전에 acquire하여 추가할 여유가 있는지 확인하고 add 해본다 . 만약 추가에 실패했다면 realease한다. 비슷하게 , remove는 remove하기 전에 release하여 세마포어에 퍼밋을 반납하여 남은 공간에 객체를 추가할 수 있도록 해준다. 

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...