묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
강의소개 질문
안녕하세요. 여기 강의소개 보고 CS 이론이라고 되어 있는데학교에서 배우는 CS theory 랑 같은 맥락의 CS 이론인건가요 ?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
멀티스레드 app 질문
안녕하세요.스레드 강의를 듣던 중에 만들고 싶은 프로그램이 생겨서 질문 드립니다.스크랩 데몬 프로그램을 만들려고 하는데DB에서 url 리스트를 조회하고리스트를 스레드 갯수만큼 분할한 뒤멀티 스레드를 활용해서 각 스레드에서 스크랩을 하고 DB에 저장 한 뒤 잠시 sleep위를 무한 반복하는 역할을 합니다.lombok, logging, dev, prod.yml config 등 springboot의 편리함을 사용하고 싶고gradle을 활용하여 멀티 모듈로 작성할 계획인데(DAC: JPA를 사용하는 역할은 따로 분리, infra mailling 등 분리)spring-boot-starter만 web 없이 사용해서 구현하려고 했더니 마땅히 작성할 위치가 보이지 않아 일단 ApplicationRunner를 구현하고 작성하였는데 문제는 build 시에 ApplicationRunner를 springboot가 실행하여서 무한 반복에 빠져서 빌드가 완료가 안됩니다.이를 환경변 수 등을 이용해서 피할 수는 있겠으나이러다보니 springboot에 작성하는게 잘못된건가 싶기도하고 그냥 쌩 자바 프로그램으로 하는게 맞을까요?선생님이시라면 어떻게 구현을 하실지 의견 부탁드립니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
join() 시 CPU 점유 여부
join()시에 스레드는 CPU를 점유한 상태에서 대기하는 건가요? 아니면 스레드 큐에 들어가있나요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
람다식과 스트림에 대해서는 강의가 없을까요!
궁금합니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
언체크 예외를 던질 때
자바 오버라이딩 규칙 중에서 부모보다 같거나 적은 개수의 예외를 던져야 한다고 알고 있습니다. 그런데, Runnable 구현 클래스의 run()에 'throws RuntimeException'을 선언하면 컴파일 오류가 발생하지 않는데 왜 그런건가요? 부모보다 많은 개수의 예외를 던졌으니 컴파일 오류가 발생해야 하는 것 아닌가요..?제가 무엇을 잘못 알고 있는 걸까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
main에서 start 호출 시
public class HelloThreadMain { public static void main(String[] args) { System.out.println(Thread.currentThread().getName() + ": main() start"); HelloThread helloThread = new HelloThread(); System.out.println(Thread.currentThread().getName() + ": start() 호출 전"); helloThread.start(); System.out.println(Thread.currentThread().getName() + ": start() 호출 후"); System.out.println(Thread.currentThread().getName() + ": main() end"); } } 개인적으로 궁금한 부분이 있는데요. main에서 start를 호출할 때 main 스택 프레임 위에 start 스택 프레임이 쌓이나요? 쌓이고 바로 삭제되는 건가요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
섹션 3. 교안에 @Override가 빠진 것 같습니다.
섹션 3. 스레드 제어와 생명 주기1[스레드의 생명 주기 - 코드] 파트 첫 번째 코드에서MyRunnable 정적 클래스의 run() 메서드 위에 @Override가 빠진 것 같습니다.물론 코드를 실행하는 점에 있어 문제는 없지만 혹시나 하고 글 남깁니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바에서 스레드풀을 생성한다면 어떻게되나요?
질문이 몇가지 더 있어 질문남깁니다.1.톰켓을 실행했을때 톰켓의 스레드풀에 있는 스레드에 의해war의 클래스파일 로직들이 실행된다고하셨는데 만약 자바 로직에서 forkjoinpool같은 스레드풀을 또 생성하면 톰켓의 스레드풀과 별도로 스레드풀이 하나 더 만들어지는건가요? 수업외 질문이라면 죄송합니다 ㅠㅠ
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바 스레드관련 질문이 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.예전부터 궁금하던건데 고급강의에서 스레드를 다뤄주셔서 너무 감사드립니다.궁금했던 질문1.war,jar 파일이 tomcat 에서 구동되면 강의에서 설명해준것처럼 tomcat 프로그램을 프로세스가 작동할텐데 동시에 3개의 요청이 tomcat 으로 들어오게 된다면 tomcat 을 돌리고 있는 프로세스는 총 3개의 스레드를 스레드풀에서 가져와서 각 각 요청에 1개씩 스레드를 할당하여 was 가 멀티스레드 처럼 작동되게 되는건가요?2.tomcat 으로 war,jar 파일을 배포하고 운영하면 tomcat 의 스레드가 war,jar 의 소스를 1줄씩 읽는거고 war,jar(자바) 에서는 스레드가 따로 생성되지 않는건가요? (자바에서 멀티스레드 사용하지 않은경우)3.2번이 맞다고 했을때 만약 자바소스에서 멀티스레드를(총3개 스레드사용) 사용했다면 tomcat 의 스레드는 1개일텐데 어떻게 멀티스레드가 되는건가요..? 자바에서 스레드를 2개 더 생성시켜버리는건가요? 궁금합니다 ㅠ4.그리고 자바에서 스레드 숫자를 설정해버리면(4개로 설정) tomcat 에서 4명의 사용자 요청만 동시에 처리할 수 가 있다고 하셨는데자바에서 스레드 숫자를 설정하는순간 톰캣의 스레드풀에서 4개의 스레드만 사용가능해지는건가요..?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
임포트가 안되요 ㅠ
자바21로 맞췄는데 왜 timeunit을 못가져올까요?>
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
섹션 1. 교안에 오타있습니다!
멀티태스킹과 멀티프로세싱ㄴ첫 번째 줄에 '기념 개념들에 대해서' -> 기본 개념들에 대해서단일 프로그램 실행ㄴ그림5 다음 설명에서 '프로그램 안에 있는 코드를 모두 후에야'-> 모두 실행한 후에야
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
유틸 클래스에 대해..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.로거 만들기에서 로거 클래스 생성할때 abstract 키워드를 추가해서 추상 클래스로 만들었는데, 그 이유가 클래스 내에 static 메서드만 있으니, 굳이 인스턴스로 만들 필요가 없어서 그런건가요??그러면 추상 클래스 말고, 일반 클래스로 만들고 기본 생성자를 private으로 해서 인스턴스화 하지 못하도록 하는 건 어떤가요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
첨부한 이미지에 대해 질문이 있습니다.
위 이미지는 멀티태스킹과 멀티프로세싱 파트에서 나온 이미지인데요 이번 프로세스와 스레드 수업을 듣고 위 이미지에 대해 의문이 생겼습니다.프로그램A는 프로세스A, 프로그램A 안에 있는 1,2,3,4는 스레드라고 봐도 될까요?슬리드
-
미해결1시간만에 끝내는 virtual thread in spring boot
pinned 확인법
https://github.com/openjdk/jdk/pull/17221이런 내용이 있네요. -Djdk.tracePinnedThreads 보다 JFR 을 권장하는 것 같습니다.
-
미해결1시간만에 끝내는 virtual thread in spring boot
1강 성능비교 질문
tomcat thread 를 500개로 늘리면 되지 않나요?
-
미해결1시간만에 끝내는 virtual thread in spring boot
스케쥴러 질문드립니다
위 그림처럼 동일한 스케쥴러 1개가콘솔 출력에서는 mySch-2, 3, 4 형태로 계속 숫자가 증가하는데, 이것은 동일한 스케쥴러가 예를들어 2번째 구동, 3번째 구동 한다는 의미일까요? 아니면 5초마다 스케쥴러가 구동되지만 각 구동은 개별적인 가상 스레드에 의해 구동되고 삭제되어 숫자가 증가하는 의미일까요?
-
미해결1시간만에 끝내는 virtual thread in spring boot
Performance 테스트에서 CPU 작업도 Virtual이 빠른것 같습니다
2000바퀴 돌릴때Platform은 279000ms가 나오는데Virtual은 97480ms가 나오네요
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
Context Switching은 언제 발생하나요?
강의 잘 듣고 있습니다!! 궁금한 점이 하나 생겨 여쭤봅니다! 프로세스 간 context switching과 스레드 간 context switching이 비용도 다르고 조금 다르게 동작하는 것 같은데요. 각각 어느 경우에 발생하는 건지가 궁금합니다! 프로세스 스레드 구분없이 CPU 배분 시간?이 끝나면 발생하게 되는건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
GameRoom class에서는 lock을 사용하지 않아도 멀티스레드 환경에서 안전할까요?
안녕하세요 Rookiss님! 양질의 강의를 제공해주셔서 정말 감사드립니다! 질문) GameRoom class에서는 lock을 사용하지 않아도 멀티스레드 환경에서 안전할까요? public void Flush() { foreach (ClientSession s in _sessions) s.Send(_pendingList); //Console.WriteLine($"Flushed {_pendingList.Count} items"); _pendingList.Clear(); } public void Broadcast(ArraySegment<byte> segment) { _pendingList.Add(segment); } 제 생각에 lock을 사용하지 않으면 _pendingList가 Clear되기 직전에 추가된 segment는 Send되지 못하고 삭제당하는 등 올바르지 못하게 동작하는 상황이 발생할 수 있을것 같았습니다. (Flush method는 main Thread, BroadCast method는 background Thread. 서로 다른 Thread에서 동작한다고 생각했습니다.) public void Flush() { lock(_lock) { foreach (ClientSession s in _sessions) s.Send(_pendingList); //Console.WriteLine($"Flushed {_pendingList.Count} items"); _pendingList.Clear(); } } public void Broadcast(ArraySegment<byte> segment) { lock(_lock) { _pendingList.Add(segment); } } 그래서 위처럼 lock을 걸어주는게 좋을것 같다고 생각했는데 걸지 않아도 괜찮은건가요? 걸어주는게 맞는건가요? 혹시 제가 놓쳤거나 틀린 부분있으면 알려주시면 감사하겠습니다!! 감사합니다!!