-
[모던 자바 인 액션] part 1 - 1Java&Spring/Java 2023. 11. 3. 16:24
"Stream 을 이용하면 에러를 자주 일으키며 멀티코어 cpu를 이용하는 것보다 비싼 synchorized 를 사용안해도 된다"
"synchronized" 키워드는 다음과 같은 비용을 수반할 수 있다.
대기 시간(Wait Time):
한 스레드가 락을 획득하기 위해 다른 스레드가 락을 해제하기를 기다려야 할 때 발생합니다. 이는 특히 공유 자원에 대한 경쟁이 치열할 때 성능 저하를 가져온다.
컨텍스트 스위칭(Context Switching) 비용:락을 기다리는 스레드들 사이에서 발생하는 컨텍스트 스위칭은 CPU 시간을 소비한다.
메모리 일관성 비용(Memory Consistency Costs):락을 사용하여 메모리 캐시 사이의 데이터 일관성을 유지하는 데 있어 추가적인 메모리 배리어(memory barriers)나 캐시 무효화(cache invalidations)가 필요할 수 있다.
데드락(Deadlock)과 같은 동기화 관련 버그:잘못된 동기화 구현은 데드락 같은 복잡한 버그를 발생시킬 수 있고, 이를 디버깅하고 해결하는 데 많은 시간과 노력이 필요하다.
1. 멀티코어 cpu 의 각코어는 캐시를 가지고 있어 동기화가 필요하다.
2. 락을 사용하면 이러한 캐시가 동기화 되어야하므로 속도가 느리다.
synchorized 키워드 의 단점은 관리의 어려움에 따라 에러가 많이 발생하고 락을 걸기 때문에 성능상의 오버헤드가 발생하여 리소스 비용이 비싸기 때문에 스트림을 이용하여 해결할 수 있다.
'Java&Spring > Java' 카테고리의 다른 글
JVM ARCHITECTURE (배경 , 특징 , 컴파일 과정 등) (0) 2023.09.15 Genric 이 타입 일반화인 줄 만 알면, 주니어입니다. (1) 2023.09.04 자료구조 Stack , add vs push (0) 2023.09.04 Sort : Arrays.sort() vs Collections.sort() & 배열 다중 정렬 및 출력 (0) 2023.09.04 GC 기본 개념 , 종류 (0) 2023.09.04