묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Backend 멀티쓰레드 이해하고 통찰력 키우기
1_Process와 Thread protobuf 부분 질문
위쪽 부분에서 궁금한점 있습니다protobuf를 사용해도 필드가 추가되면 어쨌든 어떤 것을 쓰던 JSON이랑 똑같이 공유되어야할 것 같은데 제가 놓친게 있을까요?참고로 전 protobuf 써본적 없습니다
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
CPU 라고 언급하시는게 실제 CPU 개수인가요? CPU Core를 의미하나요?
아마 Core 를 의미할 것 같은데, 많은 도서, 글과 강의들에서 CPU 라는 언급을 많이해서 명확히 알고 싶습니다 ㅠ
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
다음 강의는 언제 출시되는지 알 수 있을까요?
다음 강의가 너무 기대되는데 출시 예정은 언제인지 알 수 있을까요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[join() 강의] join() 작동 방식 정리 관련 질문이 있습니다.
안녕하세요. 선생님 join() 강의를 듣다가 11:09 내용 [join() 작동 방식] 관련해서 질문이 생겨서 질문을 남기게 되었습니다! 해당 페이지 첫번째 줄에 의하면 join()을 실행하면 현재 스레드는 대기 상태가 되고 join()을 수행중인 스레드에게 CPU를 사용하도록 한다라고 말씀 해주셨는데요.여기서 말씀을 해주신대로라면 join()을 수행중인 스레드가 바로 RUNNING 상태가 되면서 CPU를 할당받는 것인가요?아니면 그냥 스케줄러에 의해서 RUNNABLE 상태에 있던 join()을 수행중인 스레드 가 자기 차례가 되어서 RUNNING 상태가 되는 것인지 궁금합니다.현재 스레드가 자신의 차례를 join()을 수행중인 스레드에게 양보를 함으로써 join()을 수행중인 스레드가 즉시 실행이 되도록 하는것인지, 아니면 현재 스레드가 자신의 차례를 그냥 넘기게 되고 join()을 수행중인 스레드는 OS 스케줄러에 의해서 추후에 실행이 된 것인지 의문이 들어서 여쭤보게 되었습니다.5번째 내용을 보면 join()을 수행중인 스레드 에게 인터럽트가 발생할 경우, 현재 스레드는 대기에서 해제되고 실행상태로 전환되어 예외를 처리한다고 되어있습니다.join()을 수행중인 스레드 에게 인터럽트가 발생하는 것이 아니라 현재 스레드에게 인터럽트가 발생해야 현재 스레드가 대기에서 해제되고 실행상태가 되어서 예외를 처리하는게 아닌지 궁금합니다.30:00 내용을 보면 Main 스레드에게 인터럽트를 걸어야 대기에서 빠져나온다고 말씀을 해주셨습니다.1번 질문과 결이 비슷한 질문입니다.join()을 해제시키기 위해서 특정 스레드에게 인터럽트를 걸게 되면 해당 스레드는 WAITING 상태에서 RUNNING 상태로 바로 가는 것이 아니라, RUNNABLE 상태로 바뀐 후 자신의 차례에 RUNNING이 된다고 이해를 하면 되는 것일까요 ??
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
다중화된 서버일 경우 비동기 처리 관련 문의
안녕하세요! 비동기 프로그래밍을 해야되는데 너무 어려워서 강의를 등록했습니다!개인적인 궁금증인데 다중화된 서버일 경우, 비동기 호출하게 되면 리턴을 호출한 서버가 받게 되는걸까요?아니면 다른 서버가 받을 수도 있는걸까요?혹시 호출 서버가 받는게 보장된다면 그건 어디서 보장을 해주는 걸까요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[keepAliveTime - 스레드 유휴 시간 설정] - 설명에 대한 의문점
안녕하세요 선생님, 강의를 듣다가 의문점이 드는 설명이 있어서 질문 올립니다.[keepAliveTime - 스레드 유휴 시간 설정] 강의03:56 ~ 04:20 의 설명을 듣고 나서 처음에는 끄덕였는데,강의를 다 듣고 나니까 뭔가 의문점이 생겼습니다.해당 시간대에 설명에서는 Thread.sleep(3000) 메소드가 유휴상태를 일으키고, 이것 때문에 keepAliveTime 에 의해서 쓰레드가 제거된다고 설명해주십니다.이때 듣고 나서 아래와 같은 생각을 하게 되더라구요."그러면 Thread.sleep(3000) 을 하고, KeepAliveTime 을 2초를 줘서 정말 저 3초가 지나기 전에 쓰레드가 삭제되야 된다면 쓰레드가 제거되기 전에 InterruptedException 같은 걸 던지려나?" ... 라는 생각을 하게 되더라구요.그리고 제가 한 테스트 결과는 그렇지 않더군요...이상해서 이리저리 찾아보니 다음과 같은 설명을 jdk 소스 파일에서 발견했습니다. 여기서 제가 주목한 구절은 "Timeout in nanoseconds for idle threads waiting for work." 입니다.이 말은 Thread 가 sleep 같은 상태에서 멈추더라도,해당 Thread 는 "다음 일을 받기 위해서 대기하는 쓰레드" 가 아니기 때문에 keepAliveTime 에 의해서 제거되는 타겟이 아니지 않나요?더 정확히는...keepAliveTime 의 유휴시간은==> Thread.sleep(3000) 에서 유휴시간 Check X==> 쓰레드가 자기의 task 를 모두 끝난 직후부터 유휴시간 Check O... 인 게 맞지 않나요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[sleep() 강의] sleep(0) 메서드 관련 질문이 있습니다.
안녕하세요. 선생님 sleep() 강의를 듣다가 sleep(0) 메서드 관련해서 질문이 생겨서 질문을 남기게 되었습니다! sleep() 강의 중 12:25 내용을 보면, sleep을 진행하려는 Thread의 priority가 5라서 동일한 우선순위인 5인 Thread가 있는지 찾아본다고 말씀을 해주셨는데요. 제가 여기서 궁금한 점은 반드시 동일한 우선순위의 Thread만을 확인하는지가 궁금합니다. 만약 동일한 우선순위인 우선순위가 5인 Thread는 없더라도, 더 높은 우선순위의 Thread가 존재해도 컨텍스트 스위칭이 일어나지 않는 것일까요 ??
-
해결됨Backend 멀티쓰레드 이해하고 통찰력 키우기
혹시 학습한 내용을 블로그에 정리해도 될까요?
어떤 형식이던지 괜찮습니다.자유롭게 질문해 주세요~내용은 자세할수록 좋습니다~ 안녕하세요 강의 정말 잘 들었습니다.실례가 안 된다면 강의를 들으며 학습한 내용을 블로그에 포스팅해도 괜찮을지 궁금합니다.물론 출처는 반드시 밝히겠습니다. 혹시나 질문이 불편하게 느껴지셨다면 죄송합니다!!
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
추후에 WebFlux나 Reactor도 강의해주시나요?
안녕하세요 강사님. 1부에는 이런 내용이 없는 것 같은데, 2부나 3부에 WebFlux나 Reactor에 대한 내용도 강의해주시나요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[ 스레드 풀 이해와 구현 ] 예시코드 버그
선생님 안녕하세요. 강의를 듣다가 조금 이상한 부분이 있어서 문의드립니다.[ 스레드 풀 이해와 구현 ] 강의에서 작성하는 코드를 저도 그대로 따라치면서 실습을 하고 있는데요.그런데 예시 코드의 동작에 약간의 문제를 발견했습니다. 강의에서 보여주는 코드는 아래와 WorkerThread 코드는 아래와 같습니다. 그런데 제가 한 ThreadPoolMain 클래스에서 Task 를 3000 개 정도 주고, ThreadPoolSize =20 을 주고 돌려보니까, 2가지 이상현상을 확인했습니다.1. Null Poiniter Exception 발생중복 처리각각의 문제가 발생하는 이유를 정리해보니 다음과 같더라구요. NPE 발생 원인// 시나리오 1 if (!taskQueue.isEmpty()) { // 쓰레드 A,B 2개가 동시에 여기에 접근 // 쓰레드 A 가 먼저 Poll 을 해서 가져가버림. // 쓰레드 B 는 비어있는 Queue 에 대하여 poll, null 을 반환 받음 task = taskQueue.poll(); } else { continue; } // 쓰레드 A 는 정상 시작 // 쓰레드 B 는 NullPointerException! task.run(); 중복처리 원인// 시나리오 2 if (!taskQueue.isEmpty()) { // 쓰레드 A,B 2개가 동시에 여기에 접근 // 쓰레드 A 가 먼저 Poll 을 해서 가져 가버림. // 쓰레드 B 도 Poll 해서 task 를 가져감. task = taskQueue.poll(); } else { continue; } // 쓰레드 A 는 작업 시작 // 쓰레드 B 도 중복으로 해당 task 실행 task.run(); 혹시 코드를 아래처럼 짜야 되는 게 아닌지 조심스럽게 문의해봅니다.
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
비동기 작업 조합 - anyOf() 질문
안녕하세요. 비동기 작업 조합 강의 38분 30초대를 듣다가 질문이 생겼습니다. 인텔리제이 콘솔에 '최종 결과: 10'으로 출력되고 있는데요.궁금한 점은 아래와 같습니다.비동기 처리 과정이 제일 적은 cf1의 리턴 값은 10이다AnyOfExample.java 19 Line에서는 result * 10으로 계산이 되고 있다.따라서 100이 나올 것으로 예상을 했는데 10으로 출력되는 것으로 보아 2번 계산 과정을 스레드가 실행하지 않은 건가 싶어서요.혹시 제가 놓치고 있는 부분이 있나 해서 질문드립니다.
-
해결됨Backend 멀티쓰레드 이해하고 통찰력 키우기
코틀린으로 해당 C# 예제를 비슷하게 만들어봤는데, 제가 잘못 작성한 걸까요?
<상황>지식 공유자님께서 작성해주신 C# 코드 예제를 코틀린으로 비슷하게 작성해서 시도해보았지만 같은 상황이 재현되지 않습니다. <질문 의도>제가 지식 공유자님의 코드를 잘못 이해하고 작성한 것인지, 아니면 JVM의 의도치 않은 최적화 때문에 의도와 다르게 동작하는 것인지 궁금합니다. <작성한 코드>fun main (args: Array<String>) { Example().startUp() } class Example() { private var shouldStop = false fun startUp() { println("process start") val thread = Thread(Runnable { doWork() }) thread.start() Thread.sleep(1000) shouldStop = true thread.join() println("process end") } // shouldStop에 @Volatile을 붙이지 않으면 무한 루프를 돌 것이라고 생각했으나 // graceful shutdown이 잘 되어버림 private fun doWork() { while (!shouldStop) { println("doWork..") Thread.sleep(1000) } } } 좋은 강의 만들어주셔서 감사합니다!
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
강의 자료가 강의와 불일치 한 것 같습니다.
강의 자료를 받고 있는데 스프링 시큐리티 강의 자료가 받아집니다. 확인 부탁드리겠습니다.
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 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("메인 스레드 종료"); 가 호출 된 뒤 실제로는 메인 쓰레드가 종료되지는 않고다른 스레드들이 다 종료 될 때 까지 대기 중인 상태 인가요?