월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
동기화와 CPU 관계 불일치 흐름도
무릎을 탁치는 명강의였습니다. 감사합니다.
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
예제 transfer 메서드
안녕하세요, 강사님. 강의 40분에 나오는 예제의 transfer메서드에서 호출하는 withdraw, deposit 메소드는 이미 synchronized 블록 동기화가 되어있는데 왜 또 호출전에 synchronized 블록 동기화 구문을 작성하는지 궁금합니다. 감사합니다.
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
corePoolSize & maximumPoolSize 수강 중 질문입니다.
corePoolSize & maximumPoolSize - 기본 스레드 & 최대 스레드 22분 35초 정도 듣고 있는데 궁금한게 있습니다.ArrayBlockingQueue에 4개의 태스크가 모두 차면큐에 적재되지 못한 나머지 태스크는 어디서 대기 하나요?(핸들러가 없다는 가정하에) 그리고 max thread 까지 생성되면 큐에 적재되지 못한 나머지 태스크들을 max thread개수 만큼 처리하고 이후 찐으로 초과된 태스크는 처리하지 못해 Exception이 발생하나요? 뭔가 제가 이해를 잘 못하고 있는 것 같은데corePoolSize와 Queue 의 사이즈를 왜 더해서 태스크 개수와 비교하는지 이해를 못하겠어요. 태스크가 큐에 모두 채워지면 나머지 태스크 중 전체 쓰레드 개수 까지는 큐에 적재되지 못해도 처리가 된다로 이해 하면 될까요?아니면 원랜 큐가 다 차면 Exception이 발생하는데 해당 시간대의 예제에선 defaultHandler 가 뭔가 태스크가 모두 차도 쓰레드 개수만큼은 추가로 처리 할 수 있도록 뭔가 처리를 한 걸까요?--> 뒤에 더 보니 worker에서 바로 처리 하는 군요;; 추가로큐에서 태스크가 처리되면 다시 공간이 생길 것 같은데 왜 모두 차는지 이해가 잘 안되요. (제가 뭔가 잘못 알고 있는 걸까요) 강의 너무 좋습니다. 이후 강의도 빨리 내주세요 ㅠ_ㅜ
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
interrupt 스레드 시작안했는데도 걸리나요
sleep 1초 동안 thread1 시작도 안했었는데,어떻게 thread2에서 thread1을 interrupt 해서 결과가 true인지 궁금합니다.다시 말해서 아직 시작도 안한 스레드를 어떻게 interrupt 한걸까요?
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
synchronized 블록 동기화 마지막 예제
데드락 걸릴 수 있을거 같은데 맞나요?thread a: accountA.lockthread b: accountB.lockthread a : accountB.lock (대기)thread b: accountA.lock (대기)
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
SpinLock & Busy Waiting 강의 질문입니다.
안녕하세요! 강의 너무 잘 듣고 있는 수강생입니다.이전 동기화와 CPU의 관계 강의에서는 CPU가 두 개 이상의 명령어를 처리하면 원자성이 보장이 안된다고 설명을 하셨는데, SpinLock & Busy Waiting 강의에서 test_and_set(int *lock) 메서드는 CPU 하드웨어 계층에서 원자성이 보장된다는 게 이해가 잘 가지를 않습니다. test_and_set(int *lock) 이 메서드는 하나의 명령어만 처리하는 건가요??
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
사용자모드와 커널모드 피드백
유저 모드에서 I/O 장치들과 같은 특정 리소스에 접근이 불가한 것을 배웠습니다.스레드가 커널 모드가 필요하지 않는 작업을 수행할때도 어쨌든 CPU를 할당받아서 연산을 할 수 있다는 점도 직관적으로 알 수 있도록 그림이 아래와 같이 바뀌면 어떨까요?
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
cpu 개수만큼 실제로 할당되는지.. 궁금합니다.
강의에서 cpu 개수만큼 데이터 생성하고 병렬처리 하셨는데요.실제로 cpu 개수만큼 java 런타임에 모두 할당이 되나요? https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html여기 문서보니까, 자바에 할당된 cpu 개수를 의미하는거 같기도하고요.. chatgpt 는 운영체제에 할당된걸 인식하는거라고 하는데 뭔지 잘모르겠네용
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
뮤텍스 수도 코드에 대한 질문
락을 점유중인 스레드만이 락을 해제할 수 있으므로 release에 while문은 필요없지않나요? 1. 락을 점유한 스레드만이 release할 수 있음.2. 즉 release할때는 하나의 스레드만이 접근 가능함.3. 고로 release에 있는 while문은 필요가없음.추가로 제공해주신 아래 코드에서 lock 변수가 강의에서 보여주신 수도코드에서는 synchronized가 lock을 의미하고 value를 의미하는거죠?? 용어가 헷갈려서 문의드립니다. public class Mutex { private boolean lock = false; public synchronized void acquired() { while (lock) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.lock = true; } public synchronized void release() { this.lock = false; this.notify(); } }
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
SimpleThreadPool에 대한 질문
아래 코드에서 if이 왜 필요한지 궁금합니다.while문을 빠져나왔다는것은 이미 taskQueue가 비어있지않단는 뜻 아닌가요? synchronized (taskQueue) { while (taskQueue.isEmpty() && !isShutdown) { try { taskQueue.wait(); // 작업이 있을 때까지 대기 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } if (!taskQueue.isEmpty()) { task = taskQueue.poll(); // 작업 큐에서 작업 가져옴 } else { continue; // 작업이 없으면 다시 대기 } }
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
서버가 이중화인 경우
안녕하세요. synchronized, cas 등 동시성 이슈를 해결하는 기법들인데, 서버가 한대인 경우에 한해서만 위 기법들이 적용될 것 같은데요. 제가 생각한게 맞을까요?서버를 여러 개로 실행하는 경우 DB 자체에 락을 걸고 사용해야 하나요?
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
코어갯수..
int cpuCores = Runtime.getRuntime().availableProcessors();챕터 01에 exam01 코드 실행시cpuCores가 12개 로 나오는 이유가뭘까요시피유가 6코어에 12쓰레드인데쓰레드 갯수로 나오는거같아요..
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
CAS 알고리즘 질문
안녕하세요. CAS 이해와 활용 -1 편 강의를 듣다가 질문 드립니다. 3분쯤에 PDF 자료에 'CAS는 CPU 캐시와 메인메모리의 두 값을 비교하고 그 값이 동일할 경우 새로운 값으로 교체하는 동기화 연산으로 여러 스레드가 공유하는 메모리 영역을 보호하는 데 사용된다'라고 나와있는습니다.그런데 이후 강의를 듣다 보면 Main Memory Value, Expected Value, New Value 이렇게 세 가지 키워드로 CAS가 진행되더라구요. 여기서 Expected Value가 PDF 설명에 나와 있는 'CPU 캐시'를 의미하는 것 같은데요(강의 19분 쯤)기대값은 특정 블록 안에 있는 지역 변수인데 지역 변수는 JVM 스택에 저장되는 걸로 알고 있습니다. JVM 스택에 저장되는 것이 CPU 캐시인가요? 어떤 관계인지 잘 모르겠어서 질문을 드립니다ㅠ
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
lock 객체 질문
lock 인터페이스를 사용할 때 해당 클래스 인스턴스 변수로 선언하는데 이렇게 되면 선언한 클래스에 대한 고유 락을 가지는건가요? synchronized와 같은 방식과 같다면 상관없는데 또 다른 방식으로 생각해야 하나 싶어서요
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
강의 자료가 좀 깨지는 것 같습니다.
혹시, 폰트 포함해서 다시 업로드 해주실 수 있으실까요?
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
사용자 모드 커널 모드 CPU 반환 시점이 궁금합니다.
궁금한 점강의 내용에서 I/O작업이 필요할 경우 System Call 요청 -> Mode Bit 0 변경 -> I/O 리소스 할당의 과정으로 시스템이 호출된다고 되어있는데 CPU를 할당 받을 때도 커널모드가 필요한지 궁금합니다. 이유강의 자료를 확인해보면 다른 리소스들과 같이 CPU가 존재
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
스레드 중지 – flag variable vs interrupt() - 2 강의에서 질문
안녕하세요.처음 강의 부분에스레드 1번 2번이 있는데 1번에 sleep을 주어서 컨텍스트 스위칭이 일어나 코어 캐시 메모리에서 false라는 값을 업데이트한다고 하셨는데 sleep을 주지 안 아도 시간 자원이 만료되면 자동으로 컨텍스트 스위칭이 일어나서 둘 이 번갈아 가며 실행 될 때캐시 메모리가 비워지지 않는 건가요? 이 부분 때문에 이해가 잘 안 갑니다. 아니면 멀티 코어 환경이라 스레드1 캐시 메모리는 그대로 true고 sleep으로 인해서 초기화가 된건가요?
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
현재 자바 스레드 모델
안녕하세요 강사님강의에서 현재 자바에서 채택되어 사용 중인 스레드 모델이일대일이라고 하셨는데 또 인터넷에 찾아보면 다대 다이라고 하더라구요 무엇으로 이해하면 될까요.?
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
native 자바 스레드 동작 원리 질문
안녕하세요. 강사님제가 이해하고 있는 게 맞는지 궁금하여 질문드립니다.자바 코드에서 두 개의 스레드를 생성하여 실행될 때의아래 메커니즘이 맞을까요..?↓ ↓ ↓1. thread.start를 두 번 하여 시스템 콜 호출 후 커널 영역에 커널 스레드 2개 생성 후 사용자 스레드와 맵핑-> 1 코어 하드웨어 스레드 1개가 OS 스케줄러에 의해 2개의 커널 스레드를 반복 선택하여 실행(매핑된 사용자 스레드같이 반복)(이 부분에서 자바 스레드는 기본적으로 동시성 방식으로 작동하고 작업을 병렬 방식으로 처리를 해야지 N 개의 코어를 사용하여 동시 처리되는 건가요?)--------------------------------------------------2. 커널 스레드는 사용자 스레드의 존재를 모르고 프로세스의 존재만 알고 있으며 PCB 정보를 가지고 있기 때문에 커널 스레드 TCB에 사용자 스레드 컨텍스 정보들을 저장하여 게속 스위칭을 반복하며 처리
- 미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
쓰레드풀에서 쓰레드를 재사용할 수 있는 이유가 궁금합니다.
강의 초반부 스레드는 start해서 작업이 끝나면 재사용할 수 없다고 하셨고 자바독에서도 아래와 같이 start()가 재사용되는 것은 legal하지 않다고 표현하고 있습니다It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.그런데 스레드풀 재사용 시에는 뭔가 다른 작업이 있을까 해서 강의와 함깨 디버깅해보니 addWorker()에서도 Worker에 할당된 스레드의 start()메소드로 호출하고 있었습니다. 스레드 풀의 경우 start()호출 후 메소드가 종료되었음에도 스레드를 재사용할 수 있는 이유는 무엇인가요? 질문을 작성하고 나서 조금 더 고민해보니 아래와 같은 결론에 도달했습니다.(혹시 틀린 내용이 있다면 수정 의견 부탁드립니다) 비슷한 고민을 하신 분이 있을 것 같아 글을 남겨둡니다.생성된 스레드의 start() 실행 -> Worker의 run()실행 -> Worker의 runWorker()실행 -> while()조건에 의해 무한 루프무한루프가 되는 이유 : getTask()를 통해 큐에서 작업을 꺼내와 실행하고 큐에 작업이 없을 경우 블록킹되므로 블로킹이 해제된 시점에서는 task변수에 작업이 할당되어 while조건문이 true가 됨