2021-09-29

0929 CyclicBarrier 사용하기

 


1.CyclicBarrier 클래스

await()이 불린만큼 생성자안의 넘버가 한개씩 줄어들고.

넘버==0 이되면 메소드를 수행한다. 

2. 나의 경우

메인메서드에서 일단 한번 await() 걸어서. 얘 혼자 스택 못끝내게 만들어놓고.

100개의 스레드 다 만들어져서 await()이 총 101번 걸리면 그때 한꺼번에 호출!

그렇게 함으로써 total elapsed time을 구할 수 있도록 한다!


lock걸어서 동기화한다음에

await() 이 불릴때마다 카운트가 -1 씩 줄어들고

0이 되면 runnable 의 run()호출함을 확인할 수 있음. 


번외) AtomicInteger , AtomicLong클래스

Synchronized 키워드는 기본적으로 비관적 잠금이다. 

동기화 이슈는 확률적으로 매우 작게 일어나긴 하지만 , 일단 잠가놓고 본다.

그렇지만 Atomic~~클래스는 낙관적잠금을 한다.

일단 공유되어질수있고, 해당 공유되어진 값에 차이가 날경우 롤백?보완?잠금?하는 방식이라고한다. 따라서 성능면에서 더 좋다. 

아토믹하다, 원자적이라는 것은 더이상 쪼갤수없다는 것.

이를 테면 원자적 연산이란 = 더이상 쪼갤수없는 연산, 한번에 처리될 수 있는 연산을 의미한다. 

int a = 0은 원자적 연산이다.

하지만 a++ 은 원자적 연산이 아니다.

int a = 0 을 살펴보면

a 를 로드한다(4바이트) & 0을 로드한다(4바이트) & a에 0을 대입한다 => 컴퓨터가 원자적으로 처리할수있다.

하지만 a ++은어떨까?

a = a+ 1 이므로

더하는 과정에서 연산이 쪼개진다.(?) 

그리고 a가 int 가 아니라. long일경우에도! 8바이트가 되어서 연산이 쪼개진다고 함.

더 공부해야징~~


댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

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