강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

ililil님의 프로필 이미지
ililil

작성한 질문수

기초 탄탄! 독하게 시작하는 Java Part 3(상) : 멀티스레드와 동기화

synchronized 메서드와 모니터 락

몇가지 질문드립니다

해결된 질문

작성

·

77

·

수정됨

0

lock flag로 스레드가 인스턴스에 접근한다고 하셨습니다. 그런데 멀티스레드에서는 동시에 인스턴스에 접근하여 각각 코어에서 연산을 하기 때문에 동기화 문제가 발생합니다. 그럼 항상 lock flag을 획득하고 접근하는게 아닌가요?

 

그리고 스레드가 함수 단위라 하셨는데, write 과정을 cpu 스케줄링 관점에서 생각하면

Time slice 내에서 load, read 하고 기다린 뒤 다시 자신의 차례가 왔을 때 memory에 write한다고 이해했는데 맞나요?

 

또한 synchronized를 이용하면 원자성이 보장된다고 하셨습니다. 그렇다면 복잡한 로직과 관계 없이 synchronized를 붙이면 스케줄링 없이 한방에 실행되는 건가요?

 

마지막으로.. 서버를 겉햝기식으로 공부하다가 회의감이 들어 널널한 개발자님 강의를 들으며 jvm, 자바부터 다시 공부하고 있습니다. 하지만 공부를 하면서 불안하고 회의감이 듭니다. 왜 이런 감정이 드나 생각해보았더니 jvm, 멀티스레드를 프로젝트에 어떻게 녹여서 포트폴리오화 해야 할지 모르는 막막함 때문이었습니다. 제 생각에 조언, 지적을 해주실 수 있나요?

 

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

멀티스레드 환경이라 하더라도 모든 스레드가 객체에 대한 Lock flag를 확인하는 것이 아닙니다. 동기화를 하도록 코드가 작성된 경우에만 확인합니다. 동기화를 하지 않아서 발생하는 문제는 개발자 스스로 책임지는 것이며 이는 논리적 오류에 해당합니다.

스레드가 함수단위임은 맞습니다만 write 과정이 무엇을 의미하는지 모르겠습니다. 외부 장치나 파일에 대한 입/출력을 의미하는 것이라면 아무런 관련이 없는 것입니다.

동기화 메서드의 경우 메서드 코드 실행 구간이 모두 임계구간으로 처리됩니다. 스케줄이 되는 대상은 메서드가 아니라 메서드를 실행하는 스레드 입니다.

마지막으로 멀티스레드를 넘어 고성능 서버를 개발해보는 것이 좋겠다는 의견을 드려봅니다. 간단한 채팅이나 메시징 시스템을 만드는 것도 대규모로 확대한다면 결코 쉽지 않습니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다.
ililil님, 멀티스레드의 동기화와 관련하여 여러 가지 질문을 주셨군요. 해당 주제는 매우 중요한 개념이기 때문에 이해를 돕기 위해 기존 질문과 답변을 몇 가지 찾았습니다.

멀티스레드에서의 동기화 문제

멀티스레드는 여러 스레드가 동시에 자원을 접근할 수 있습니다. 이때 동기화 문제가 발생할 수 있어 lock을 사용하여 접근 제어를 하게 됩니다. lock flag는 이러한 동기화 문제를 해결하기 위한 방법 중 하나입니다. 하지만 모든 접근에서 항상 lock을 사용하는 것은 아닙니다. 성능을 고려하여 필요한 곳에만 사용합니다.

관련 질문으로 참고할 수 있는 링크는 다음과 같습니다:
- 리눅스 환경도 스레드 생성 원리는 동일한건가요?에서 스레드 생성과 인스턴스 접근에 대한 기본적인 설명을 참고하실 수 있습니다.

스케줄링 관점에서의 스레드

Time slice란 CPU 스케줄러가 각 스레드에 할당하는 시간입니다. 스케줄링 관점에서 스레드는 할당된 시간 내에 작업을 수행하고, 이후에는 다시 대기하였다가 다음 차례에 이어서 수행하게 됩니다. 스레드가 특정 작업을 완료하지 못하면 다시 대기하며, 이 과정은 연산 자원을 스레드들이 공평하게 나누기 위함입니다.

커리어 개발 및 포트폴리오

JVM과 멀티스레딩을 프로젝트에 녹여내는 방법은 다양합니다. 예를 들어, 멀티스레딩을 이용한 효율적인 처리 시스템이나 JVM 최적화를 활용한 프로젝트를 만들어 보실 수 있습니다.
포트폴리오에선 구현하고자 하는 기능의 목적과 성능 개선이 어떻게 이루어졌는지를 명확히 하면 좋습니다.

무엇보다도, 불안감은 성장 과정에서 자연스러운 감정입니다. 천천히 프로젝트로 구현해보면서 자신만의 방법을 찾는 것이 중요합니다. 널널한 개발자님의 강의를 통해 차근차근 학습해 나가시면 좋겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ililil님의 프로필 이미지
ililil

작성한 질문수

질문하기