묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
중첩 스레드는 실무에서 어떤 경우에 사용하나요?
중첩 스레드는 어떤 경우에 사용하는지 궁금합니다.그동안 래핑된 스레드 클래스를 써와서 그런건지는 모르겠는데,,,
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
병렬성은 동시성의 하위 개념에 대한 질문
병렬성과 동시성은 동시에 실행된다는 내용만 같고 구체적인 처리 방식은 달라보이는데 '병렬성은 동시성의 하위 개념'이다 라는 내용이 이해가 안갑니다.만약 동시성이 여러 일이나 사건이 동시에 발생하거나 진행되는 상태를 말한 개념을 말한거라면 '병렬성은 동시성의 하위 개념'이다 라는 내용이 이해가 가는데강사님께서 설명한 특정한 순서 없이 겹치는 기간에 시작, 실행 및 완료 되는 여러 작업에 관한 동시성에 대한 개념으로 '병렬성은 동시성의 하위 개념'이다 라는 내용을 이해해볼려 하면 이해가 안되는 것같습니다.만약 해당 동시성이 후자라면 어떻게 '병렬성은 동시성의 하위 개념'이 되는지 궁금합니다.
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
안녕하세요 강사님 질문있습니다
강의 정말 잘 듣고있습니다!!제 프로젝트에서 회원가입API에 회원가입과 메일전송이있고 메일전송을 스프링의 @Async로 처리하고 있는 상황입니다.1. 만약 CPU가 1대라면 API호출한 스레드와 비동기 스레드가 context switching 발생하면서 처리되는게 맞을까요?2. 만약 100개의 요청이 회원가입 API에 몰리고 cpu가 1대라면 Async전용 스레드풀의 스레드 개수는 어떻게 될지 짐작이 안갑니다. 일반적인 애플리케이션 스레드풀은 강의해주신대로 스레드풀 사이즈, 큐 사이즈 등에 따라서 그림이 그려지지만.. Async전용 스레드풀도 똑같이 100개의 요청이 한번에 들어와 애플리케이션 스레드풀처럼 동작할까요..?
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
RestTemplate 호출하여 응답기다릴때도 runnable 이 맞나요?
우선 좋은 강의 감사드립니다.강의내용중 running -> runnable 로 이동하는 방법에 yield, I/O 가 있다고 하셨는데, DB query 등을 하면 응답이 올때까지 waiting으로 상태변경이 되는게 아닐까 싶어 샘플코드를 짜보니 정말로 running-> runnable 상태이던데, 1) 응답이 올때까지 기다리는 것이기도 하고 2) runnable 이면 언제라도 running이 될수 있는데, 이 경우 running -> runnable -> running 으로 상태변경되었는데 아직 응답이 오지 않았으면 다시 runnable 로 넘어가고.. 이런게 반복되는건가요? 샘플코드는 아래와 같이 만들어봤습니다. RestTemplate template = new RestTemplate();template.getEntity(xxx); // 응답이 10초 걸리는 api 호출10초 내에 위 작업을 하는 쓰레드의 상태를 log 로 찍으니 runnable 로 나왔습니다.
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
동시성과 병렬성 질문
안녕하세요. 강의를 듣다가 궁금한 점이 있습니다!CPU 코어 수보다 작업 수가 같거나 많은 경우병렬성 처리 + 동시성 처리CPU 코어 수보다 작업 수가 적은 경우병렬성 처리 이렇게 이해를 했는데요.'작업 수'라는게 정확히 어떤 작업을 말씀하시는 건가요?예를 들어, jar를 nohup으로 실행하면 프로세스 하나가 실행되는데 이 안에서 작업이라는거는 어떤 것을 말씀하시는 건지 궁금합니다. (자바 메서드를 실행하거나 그런건 아닌거 같은데..) 그리고 하나 더 궁금한 점이 있는데요.만약 java main 메서드가 실행되어 "hello world"라는 출력을 한다고 하면, CPU가 스케줄 알고리즘으로 프로세스에 할당한 커널레벨 스레드가 자바의 main 스레드를 call 해서 main 스레드가 "hello world"를 찍는 건가요? 아직 제가 강의 뒷부분을 안들어서 그런건지..ㅋㅋㅋ
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
notifyAll 이 더 선호되는 이유에 대한 조금 더 detail 한 설명 요청드립니다.
안녕하세요 선생님, 질문이 있어서 글 올립니다.[스레드 간 협력 - wait() & notify() 강의 - 6:23 ] 즈음에"notifyAll 이 더 선호된다"... 라고 했는데, 제가 뭘 놓친 걸 수도 있지만, 잘 이해가 안됩니다. 왜 notfiyAll 이 선호되는지에 대한 핵심적인 이유를 알려주실 수 있을까요?
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
사용자 스레드 vs 데몬 스레드 강의에서요
메인스레드는 어플리케이션을 실행하는 최초의 스레드이자 어플리케이션 실행을 완료하는 마지막 스레드의 역할을 한다 고 되어있는데제공해주신 예제 코드 chaper02 의 exam02 MultiThreadAppTerminatedExample 를 실행 시켜보면 메인스레드 종료가 먼저 출력 된뒤 다른 스레드들이 실행 중 이라고 출력 됩니다.그러면 예제 코드에서 System.out.println("메인 스레드 종료"); 가 호출 된 뒤 실제로는 메인 쓰레드가 종료되지는 않고다른 스레드들이 다 종료 될 때 까지 대기 중인 상태 인가요?
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
인코딩중인 동영상은 나중에 업로드되는건가요?
제목그대로 인코딩중이라는 영상이 존재하는데, 기다리면 업로드되나요?
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
Thread run 메쏘드 안에서, 새로운 Thread 생성
Thread 의 run 함수 안에서, 새로운 Thread 를 생성 할 경우가 있을까요?만약에, 그 경우가 있다면, Thread stack 과 Heap 영역의 구조가 어떤 식으로만들어질 지, 궁금합니다.즉, 기존 Thread Stack 에서, 동일하게, 새로운 Thread 가 Heap 에 할당되고, 새로운 Thread Stack 영역이 만들어지나요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[스레드 중지 – flag variable vs interrupt() - 2] 강의에서 나오는 Cache clear 와 관련된 질문
안녕하세요 선생님, 질문이 있습니다.[스레드 중지 – flag variable vs interrupt() - 2] 강의 - 9:00 ~ 9:08 즈음에 쓰레드 Context Switch 에 의해서 캐시가 비워진다고 말씀해주셨는데요.제가 [Context Switch] 강이 - 16:50 즈음에 나오는 ppt 하단의 프로세스 vs 쓰레드 목차에는 CPU 캐시 초기화는 프레세스 컨텍스트 스위칭에서 일어난다고 나옵니다. 음... 혹시, 쓰레드 Context Switch 도 CPU 캐시를 초기화할 수 있는 건가요??
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[스레드 중지 – flag variable vs interrupt() - 2] 강의 Context Switch 관련 질문있습니다.
안녕하세요 선생님, 재밌게 강의 보고 있는 개발자입니다.제가 [스레드 중지 – flag variable vs interrupt() - 2] 강의에서 9:15 즈음에, Thread.sleep(1) 을 통해서 Context Switch 를 강제하는 방법을 봤습니다. 결과적으로 정상 종료가 되었구요. 그런데 문득 의문점이 들더군요.제 의문점을 기반으로 질문을 하자면 아래와 같습니다. Question:굳이 Thread.sleep(1) 을 하지 않아도 제 컴퓨터에는 이미 무수히 많은 프로세스와 쓰레드가 존재하니, 언젠가는 Java 의 Thread 도 Context Switch 가 일어나지 않나요?? 그러면 결과적으로 계속 기다리면 언젠가는 Thread.sleep(1) 을 안 써도 실행한 main 문이 정상 종료되는게 맞지 않나요?
-
해결됨Backend 멀티쓰레드 이해하고 통찰력 키우기
캐시 플러시 관련 궁굼한게 있어서 질문 드립니다!!
컨텍스트 스위칭에서 캐시 플러시가 발생한다고 되어 있는데,이는 프로세스 간의 컨텍스트 스위칭이 아니라 스레드간 컨텍스트 스위칭에서도 발생하는지 궁굼합니다.왜냐하면 스레드는 주소 공간을 공유하기 때문에 데이터 영역은 플러시해야겠지만, 명령어 영역은 플러시 하지 않아도 되는거 아닌가 생각이 듭니다. 또한 캐시를 플러시 한다는 뜻이 캐시의 데이터를 메모리에 반영하는, 즉 write-back 동작인지도 궁굼합니다.제가 검색을 통해 찾아봤을 때는 캐시 flush는 캐시를 invalidate 하여 캐시를 메인 메모리에 반영하지 않고 초기화만 하는 것으로만 나왔습니다. 그런데 캐시 플러시가 메인 메모리에 반영하지 않는다면 데이터가 없어져 버리니, 제가 알아본 개념이 잘못된 것이 아닌가 합니다. 제가 자바로 실행했을 때 역시 컨텍스트 스위칭이 발생하면서 캐시 데이터가 메인 메모리로 반영이 되고, 그 값을 가져옴으로써 스레드가 종료될 수 있었습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
멀티 쓰레드 문의드립니다.
Spring Thread-Safe를 하기 위해서는 "공유 변수"를 사용할 때 주의하라고 하셨습니다.여기서 공유 변수의 범위는 어떻게 되는 것일까요?public SampleService {public SampleService { public ArrayList<String> list1; // 1번 public get() { ArrayList<String> list2; // 2번 } }제가 생각했을 때는 1번은 멤버 변수이므로 당연히 공유 변수라고 생각되는데 2번의 경우 지역 변수라 Thread-Safe 하다고 판단됩니다. JVM 구조 상에서도 Thread 별로 Stack 메모리를 지니기 때문입니다.한편으로는 Singleton 형태이기 때문에 Thread 1, 2, 3에서 동시 접근 할 경우에는 Thread-UnSafe 하다고 판단되는데요. 2번 즉, 함수 안의 지역 변수는 Thread-Safe 한지 아닌지 궁금합니다.
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
multi thread와 PC, PC register, context switching
multi thread와 PC, PC register, context switching에 대해서 이 노트와 https://www.inflearn.com/questions/489172 를 참조하여 새롭게 정리해 보았는데 제가 이해한 것이 맞는지 한번 보아주십시오. multi thread에서는 각각의 thread가 자신의 PC값을 TCB(Thread Control Block)에 저장을 합니다(multi thread에서는 각각의 thread가 독립적인 PC값을 가지고 있어야 합니다). 그 이유는 한 process 내에서도 thread 사이에 context switching이 일어나는데, TCB에 code address(PC)가 저장되어 있어야 해당 쓰레드가 어느 코드 영역까지 진행했는지를 기억하여 그 다음 코드부터 실행을 할 수 있기 때문입니다. 예를 들면 thread a 에서 thread b로 context switch가 일어나면, 현재의 PC register에 저장되어 있는 값을 thread a의 TCB에 저장을 하고, thread b의 TCB의 PC값을 불러와 PC register에 저장을 합니다. CPU는 PC register가 새롭게 가리키는 thread b의 code영역, 즉 thread b 내에서 다음에 실행해야 할 명령의 주소값(PC)을 참조하여 실행을 하게 되는 것입니다. ▶ multi thread concurrency: thread 사이에 context switching을 하다가, 또한 process 사이에서도 context switching을 하는 것입니다. 예를 들면 process 1과 process 2에 각각 thread a, thread b가 있다고 하면, process 1의 thread a에서 process 2의 thread b로 context swtiching이 일어나면, PC register의 값을 process 1 thread a의 TCB에 저장을 하고, process 2 thread b의 TCB의 PC값을 불러와 PC register 값에 저장을 하면, CPU는 PC register가 가르키는 process 2 thread b의 code 영역을 참조하여 실행을 하게 되는 것입니다.
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
context switching과 cache memory
process context switching 시에 캐시 메모리를 초기화 해야 하지만 thread간의 context switching시에는 초기화 할 필요가 없는 이유가 무엇인가요~? context swtiching에서 캐시 메모리가 하는 역할은 무엇인지요?