inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

싱글 스레드 & 멀티 스레드

lock을 사용했음에도 병렬처리가 더 빠른 이유가 궁금합니다.

해결된 질문

387

선종우

작성한 질문수 5

1

안녕하세요 강사님 강의(싱글스레드 & 멀티스레드)를 듣다가 궁금한 점이 생겼습니다.예제 코드에서 1 ~ 1000을 더하는 for문의 실행시간은 약 2초 정도가 나오고 이를 2개의 스레드로 처리하면 약 1초 정도가 나왔는데요.synchronized키워드를 이용해서 lock을 걸 경우 해당 자원에는 하나의 스레드만 접근하게 되므로 예제의 경우 사실상 병렬처리가 불가능함에도 처리속도가 더 빠른 이유는 무엇인가요?

사양은 다음과 같습니다 : 인텔® 코어 i5-7500 프로세서 ; 스레드 수. 4 ;

GPT 도움을 받아 아래와 같이 추측해 봤는데 맞을까요?

java 동시성 multithread synchronisation

답변 2

0

정수원

음..네

저도 그럴 가능성이 있다고 판단됩니다.

현재 synchronized 키워드는 전체 메서드가 아닌 합을 구하는 것 까지 하고 락을 해제합니다.
그리고 나서 sleep(1) 을 주기 때문에 락이 없는 상태에서 스레드간 컨텍스트 스위치가 발생학 이로 인한 부분적인 병렬처리가 이루어질 수 있습니다.
그 외 특별히 다른 이유는 보이지 않네요

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
선종우님 질문에 대해 답변드립니다.

멀티스레딩 환경에서 synchronized 키워드를 사용하여 lock을 걸면 하나의 스레드만 특정 자원을 사용할 수 있게 됩니다. 그럼에도 병렬처리가 더 빠르게 느껴질 수 있는 이유는 여러 가지가 있습니다.

  1. 컨텍스트 스위칭: 멀티스레드가 synchronized 블록 외부에서 동작하는 시간에는 다른 스레드와 병렬로 작업을 수행할 수 있으며, 스레드 간의 컨텍스트 스위칭을 통해 계산 자원을 효율적으로 사용할 수 있습니다.

  2. 스레드의 sleep 상태: 말씀하신 것처럼 한 스레드가 sleep 상태에 있는 동안 다른 스레드가 CPU 자원을 사용해서 연산을 수행할 수 있습니다. 이는 싱글스레드의 경우 지연이 발생하는 반면, 멀티스레드 환경에서는 sleep 상태에 있는 스레드가 CPU 자원을 점유하지 않기 때문에 다른 스레드가 작업을 처리할 수 있어 더 효율적입니다.

  3. 자원의 경합 상태: synchronized 블록이 사용되고 있지 않는 시간에 스레드들은 자유롭게 나머지 부분의 코드를 병렬적으로 실행할 수 있습니다. 즉, 모든 코드가 lock이 필요한 부분이 아니라면 비록 lock이 걸리는 시간 동안은 한 스레드만 작업을 수행할 수 있지만, lock을 요구하지 않는 다른 작업에서는 여러 스레드가 병렬로 작업을 수행할 수 있습니다.

실제로 성능이 어떻게 나타나는지는 직접 코드를 실행해 보면서 다양한 요소들을 고려해야 합니다. 동기화에 따른 오버헤드, 스레드 스케줄링, CPU 캐싱, 작업 분할 방법 등이 전체적인 성능에 영향을 미칠 수 있습니다.

코드 상황에 따라 상이할 수 있으니 실제 코드의 동작 방식과 구현 부분을 확인하는 것이 정확한 답변을 얻는데 도움이 될 것입니다.

멀티스레드 단일스레드

0

56

0

new Condition 부분 질문

0

83

1

13:00 강의 내용 이해 질문

0

99

1

강의 출시 질문 있습니다.

0

117

1

InterruptedExceptionThreadStopExample 질문입니다.

0

94

2

instance.getMyField()의 값이 왜 다른가요?

0

115

1

해당 강의 내용 무단 도용 신고

0

211

2

Thread Waiting 상태 관련 질문 드립니다.

0

186

1

단일연산변수 api

0

126

0

synchronized 블럭과 메인메모리 반영

0

147

0

실무에서 자바가 제공하는 락을 사용하는 경우

1

243

1

뮤텍스나 세마포어는 busy waiting이 없는 게 맞을까요?

0

159

1

16:50부분에서 타입락 질문드립니다.

0

110

2

16분 7초 뮤텍스 코드 관련해 질문드립니다.

0

160

2

동기화가 보장된다고 하더라도 스레드간 데이터 불일치가 발생할 수 있지 않나요??

0

199

2

리액티브-part2

0

180

2

문자열 풀 값을 이용한 String 변수

0

207

2

스레드 라이브러리는 커널과 같은 역할을 하지 못하나요?

0

173

1

자식 프로세스를 쓰는 이유

0

186

1

커널 모드 전환시 질문이 있습니다!

0

146

1

[공유] setName 시 threadName이 1부터 시작하는 이유

0

178

1

synchronized = 모니터

0

285

2

Thread의 Context Switching 문의드립니다.

1

257

1

동기 & 논블록킹 질문 드립니다.

0

232

2