묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
인터럽트, 체크 예외 catch 재질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. AI의 답변을 받았으나, 여전히 이해가 가지 않아 재질문 올립니다ㅠㅠ 이 예제에서 Thread.sleep(3000);으로 인한 InterruptedException e를 catch한 후에 왜 log("sleep() end");~log("end");가 마저 출력되는지 잘 모르겠습니다. 예외가 발생하면 try 코드 본문을 빠져나가 catch로 이동하면서 try의 나머지 코드는 출력 안 되지 않나요? 예외를 잡으면 정상 흐름을 반환한다고는 하지만, 다시 실행되는 정상 흐름에 나머지 try 코드는 포함이 안 된다고 알고 있습니다...ㅠ 혹시 제게 오개념이 생겼나 싶어서 Java-Mid1의 오류 처리 파트를 다시 총 복습하고 와도 여전히 이해가 가지 않습니다. 답변 감사드립니다...ㅠ ps. 혹시 몰라서 제 의문을 가중시킨 Java-Mid1 강의의 예제 코드를 추가합니다. 아래의 예제에서는 send()에서 오류 발생 시에 try{}를 빠져나가서 disconnect();가 호출이 안 된다고 합니다ㅠ
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
강의 출시 질문 있습니다.
우선 좋은 강의 만들어 주셔서 정말 감사드립니다 :)얼마전에 스프링 MVC 관련 강의를 출시 해주셨는데요. 구입하고 한번 내용 확인해보니 앞으로 강의 출시 FLOW 를 설명 해주신 내용이 있었습니다. 동시성 파트 부분인 '리엑티브 프로그래밍' -> 'WebFlux' 강의 도 있는데요. 다음 강의 출시 할때 이 부분 부터 강의 출시 해주시는 건지 알고 싶습니다. (사실 '동시성 프로그래밍' 강의 이후 '리엑티브 프로그래밍' -> 'WebFlux' 강의를 손꼽아 기다리고 있었거든요 ㅠ,ㅠ)
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
인터럽트, 체크예외 catch 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]멀티스레드와 동시성 강의-스레드 생명주기 파트에서 질문 드립니다.Thread.sleep(3000)으로 InterruptedException이 발생했고, catch로 그걸 잡았는데 왜 sleep()으로 다시 돌아가서 다음 로그가 출력되는 등 정상 흐름이 마저 진행되나요? 체크 예외가 발생하면 그걸 catch로 잡더라도 이후 코드는 마저 실행되지 않아 finally 코드가 도입된 것이 아니었나요? java-mid1에서 체크 예외가 발생해 나머지 코드가 실행되지 않아 자원 정리가 안 되었던 예제를 배웠던 것 같은데, 이 예제와 무슨 차이가 있어서 다른 결과가 나오는지 궁금합니다ㅠㅠ 2. 이 예제에서 InterruptedException이 발생해서 그걸 catch한 것까지는 이해됩니다. 그런데 왜 굳이 새 RuntimeException을 생성해서 또 던지는 건가요? InterruptedException 이외에 추가로 발생할 지도 모르는 다른 예외들도 한꺼번에 잡아서 던지려는 의도인가요(예방 차원)? 3. 예외를 어떤 경우에 잡고 어떤 경우에 던져야 하는지 궁금합니다. java-mid1 예외 처리 파트에서 예외를 못 잡으면 던지고 잡을 수 있으면 잡아야 한다고 배웠는데, 그 구체적인 기준을 잘 모르겠습니다. 그걸 배울 당시에는 '아직 기초 단계라 기본 개념만 잡고 자세한 오류 해결 과정은 나중에 나오나 보다'하고 넘겼는데, 이 예제에서도 그냥 catch(발생한 오류) 정도로 넘어가는 걸 보니 제가 뭔가 놓치고 있는 것 같습니다. 그냥 catch()코드를 넣으면 오류를 잡았다고 자바 상에서 처리가 되는 건가요? 그런 거면 그냥 오류를 다 catch로 잡아버리면 될 것 같은데, 굳어 던져야 하는 상황은 어떤 상황인가요...? 질문이 너무 길어졌네요. 친절한 답변에 미리 감사드립니다!!!
-
미해결운영체제 공룡책 강의
컨텍스트 스위칭과 PCB
안녕하세요! 먼저 좋은 강의를 제공해주셔서 너무 감사합니다. 다름이 아니라 강의를 듣다가 궁금한점이 들어서 글을 남기게 되었습니다. 운영체제운영체제는 프로세스를 관리하며, 컨텍스트 스위칭 시 프로세스마다 할당된 PCB 자료구조를 확인하여 CPU의 레지스터에 상태(Context)를 설정한다는 것으로 이해하였습니다! 컨텍스트 스위칭그렇다면, 프로세스 A, 프로세스 B가 메모리에 로드되어 있는 상태에서 프로세스 A가 실행되다가 할당된 CPU Time 을 다 소비하게 된다면 CPU Interrupt 가 발생되어, A의 PCB에 현재까지의 context를 저장하게 될 것이라고 추측하고 있습니다.그렇다면, 프로세스 A에서 프로세스 B로 컨텍스트 스위칭이 되는 것이 아니라 프로세스 A에서 운영체제로 컨텍스트 스위칭이 되고, 운영체제가 프로세스 A의 PCB 작업을 처리한 후에 프로세스 B로 다시 컨텍스트 스위칭이 되는 것이 맞을까요?? 추가로, 운영체제 또한 자료구조이며 PCB 자료구조는 동적으로 생성 및 삭제가 되는 것으로 생각이 되는데 운영체제 역시 하나의 프로세스로 간주하여 운영체제의 동적 메모리 영역인 힙 영역에 PCB가 생성 및 제거 되는 것일까요??
-
미해결운영체제 공룡책 강의
퀴즈 답지
안녕하세요 강의 잘 듣고 있습니다!혹시 퀴즈 답지는 어디서 볼 수 있을까요?
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
Task 클로저에서 weak self 미사용에 대해 질문드립니다!
양질의 강의 만들어주셔서 업무에 많이 도움이 될 것 같아 먼저 감사의 말씀 드립니다:)'Task(작업)과 self 사용 관련 및 캡처리스트의 weak self 사용 (5강)'에서 질문 드립니다. Task 클로저 내에서 weak self를 생략하더라도 메모리 누수 관점에서 문제가 없는 것은 이해가 되었습니다!다만, GCD를 Task로 전환하는 관점에서 생각해봤는데요 'self가 해제된 시점'에서 'weak self 사용'한 'GCD 클로저'에서는 내부 동작이 실행되지 않을 것 같은데요'self가 해제된 시점'에서 'weak self 미사용'한 'Task 클로저'에서는 내부 동작의 실행이 보장될 것 같은데 제가 이해한게 맞을지 궁금합니다!길지 않은 비동기 작업이더라도 미세하게 동작 차이가 발생할 수 있는 부분이 아닐까 싶어 질문 드렸습니다!
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
안녕하세요. 액터 홉핑 관련 질문드립니다.
📌자주하는 질문 모음링크: https://pointed-earwig-996.notion.site/Swift-Concurrency-for-Swift-6-Part-2-1acbbab5ec9280a0944edcab00e027dd?pvs=4 자주하는 질문을 먼저 확인 부탁드리며, 질문은 최대한 구체적으로하셔야 빠르게 답변드릴 수 있습니다. [질문 예시](1) 몇강, 몇초의 내용이 잘 이해가 안갑니다. (제가 적어놓은 강의 번호 "10강, 7분 강의 내용 중에... " )(2) 강의자료 몇 페이지의 내용이 잘 이해가 안갑니다.(3) 정확하게 어떤 포인트에 대한 내용이 이해가 안갑니다. 다시 설명해주실 수 있나요 안녕하세요. 실행자(executor)와 액터 홉핑(actor hopping)과 관련해 질문이 있어요. 액터에 실행자 개념까지 나오니 너무 헷갈리네요. 액터 홉핑이 일어나게 되면, 액터에 내장되어 있는 실행자(executor)가 전환되고, 이는 곧 액터에서 실행되는 스레드의 묶음이 바뀌는 것이니, (실행 컨텍스트는 물론) 스레드 컨텍스트 스위칭이 일어날 수 있다라고 보는 게 맞을까요? 메인 액터-일반 액터 간 홉핑은 메인 스레드와 협력형 스레드 풀 간의 전환이니, 실행 컨텍스트와 스레드 컨텍스트 전환이 무조건 일어나는 게 맞을까요? 일반 액터-일반 액터 간 홉핑은 모두 Swift 동시성이 기본으로 제공해주는 직렬 실행자(serial executor)에서 실행되고, 이 직렬 실행자는 협력형 스레드 풀에서 실행되는 것이니, 실행 컨텍스트 전환은 일어날 수 있어도 스레드 컨텍스트 스위칭은 일어날 수도 있고, 일어나지 않을수도 있다고 보는 게 맞을까요?(플레이그라운드에서 Thread.current로 찍어 실험을 해봤을 땐, 모두 동일한 스레드에서 실행되는 걸로 보입니다)
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
Thread의 yield함수
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]Thread 의 yield 함수에 대해서 질문드립니다 .양보를 할지 말지 에 대한 hint만 주는것이고 스케쥴링이 알아서 양보 여부에 대해 정한다고 하셨는데 만약에 양보를 하게되면 que의 제일 뒤로 가게 되는건가요? 만약에 que에 10개의 일이 쌓여있으면 양보를 하게되면 10개가 다 끝나고 실행 되는 건지아니면 1~~n개가 실행되고 그다음에 실행 되는 건지는 모르는 건가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
BlockingQueue와 Semaphore는 언제 각각 사용하는 게 좋을까요? FIFO 순서 보장과 동기/비동기 흐름의 차이로 구분할 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 항상 좋은 강의 감사드립니다.BlockingQueue는 스레드가 동시에 접근하였을때 동시성 제어를 위한 자료 구조인데 세마포어 개념도 동시에 스레드가 접근 하였을때 가능한 스레드 수를 제어하는 개념인 것을 공부하였습니다. 어떤 상황에서 BlockingQueue 를 쓰고 어떤 상황에서 세마포어를 쓰는게 더 좋을까요?락을 획득하였을떄 Queue 는 FIFO 구조이므로 순서를 보장해주고 싶을 떄 BlockingQueue 를 쓰는게 좋나요? 세마포어는 스레드가 직접 자원을 획득하기 전까지 기다리니까 동기이고 비동기는 큐에 넣고 다른 일을 하러 가는 즉 호출한 함수가 처리 결과를 기다리지 않는 비동기여서 동기/ 비동기 차이를 구분하고 싶을때 쓰는게 둘을 구분해서 쓰는게 좋을까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
main 스레드.sleep
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예안녕하세요, 강의 수강 중 질문이 생겨 여쭤보게 되었습니다. 스레드의 생명 주기 - 코드 강의 파트에서 Thread.sleep(1000);를 입력하여 메인 스레드를 잠시 멈추는데, 메인 스레드의 이름이 Thread라서 Thread.sleep을 하는 것일까요 ? 아니면, sleep 메서드가 static이어서 이렇게 사용되는지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
CAS 연산3 강의 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]1. 여러 스레드가 정말 완벽하게 동시에 실행되는 경우임의의 두 스레드 A, B가 정말 완벽하게 동시에 실행되었다고 가정하겠습니다. 현재 atomicInteger의 value가 0에서 1로 증가해야하는 상황입니다.A와 B 모두 getValue의 값은 0입니다.A와 B 모두 result의 값은 true가 될 것이며 getValue는 0에서 1로 증가합니다. A와 B 모두 1을 return 합니다. (결괏값: 1)이런 경우는 절대로 없는 건가요?2. sleep 사용 시 타 스레드 간섭이 증가하는 이유sleep 사용 시 타 스레드 간섭이 증가하는 이유를 제 나름대로 생각해 보았는데, sleep(100)이라 하더라도 모든 스레드가 100ms 후에 완벽하게 동시에 깨어나지는 않기 때문일까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
프로세스와 스레드 관련해서 질문 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 해당 강의를 듣고 질문이 있는데요,우리가 일반적으로 자바/스프링부트 프로젝트를 맥북으로 인텔리제이로 실행한다면 어떻게 프로세스가 이루어지는지 알 수 있을까요? 제가 생각해본건 아래와 같습니다. 프로세스 1자바(강의 내용중에, 자바를 실행하면 자바도 하나의 프로세스라고 하셔서 추가했습니다) 프로세스 2JVM(그리고 이 JVM이 가상 컴퓨터이니까 그 컴퓨터의 프로세스 내부에서 스프링부트가 실행된다고 생각하고 있습니다!) 프로세스 3인텔리제이 이렇게 생각하고 있는 게 맞는 내용일까요??
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
interrupt() 호출 후 출력 결과 질문있습니다. 확인 부탁드립니다!!!!
처음 예제 작성했을 때 출력 결과가 이렇게 나왔었는데, (강의 5분 10초, 10분 50초 참고)work] 작업 중 work] 작업 중 main] 작업 중단 지시 thread.interrupt() work] work 스레드 인터럽트 상태2 = false main] work 스레드 인터럽트 상태1 = true work] interrupt message=sleep interrupted work] state=RUNNABLE work] 자원 정리 work] 작업 종료이 상황에서는 main스레드에서 interrupt() 후 바로 work 스레드가 예외 처리해서 work 스레드의 인터럽트 플래그가 false 로 됐다는 걸 확인할 수 있습니다. 하지만 그 이후 main스레드에서 work 스레드의 인터럽트 플래그가 true가 출력되었는데 어떻게 false가 아닌 true가 출력될 수 있는지 궁금합니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
ExecutorService close() 메소드 동작 설명 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]ExecutorService 우아한 종료 - 구현01:07 close() 메소드 설명 부분에"shutdown() 을 호출하고, 하루를 기다려도 작업이 완료되지 않으면 shutdownNow() 를 호출한다." 에 오류가 있어 보입니다. [내용 정정]"shutdown() 을 호출하고, 작업이 완료될 때까지 무한정 반복대기한다. 인터럽트가 발생하면 shutdownNow() 를 호출한다." 로 변경해야 하지 않나요? [근거]Eclipse Temurin-21.0.4+7 (JDK 21) 버전 코드 원문public interface ExecutorService implements Executor, AutoClosable { // .. @Override default void close() { boolean terminated = isTerminated(); if (!terminated) { shutdown(); boolean interrupted = false; // 작업 미완료시 재시도 while (!terminated) { try { // 하루간 작업 종료 대기, 작업 미완료시 `false` 반환 terminated = awaitTermination(1L, TimeUnit.DAYS); } catch (InterruptedException e) { if (!interrupted) { shutdownNow(); interrupted = true; } } } if (interrupted) { Thread.currentThread().interrupt(); } } } }1일이 지났다고 해서 interrupt() 를 호출하지 않고 재시도 하는 것으로 보입니다. [증명 코드]MyExecutor 로 close() 메소드 대기 시간을 1일 -> 1초로 조정하여 오버라이드합니다.10초간 대기하는 Task 를 실행시킵니다.class ShutdownTest { record CallableSleepTask( String name, long sleepMs ) implements Callable<Long> { @Override public Long call() throws Exception { sleep(this.sleepMs); return this.sleepMs; } } static class MyExecutor extends ThreadPoolExecutor { public MyExecutor() { super(1, 1, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); } @Override public void close() { boolean terminated = isTerminated(); if (!terminated) { shutdown(); boolean interrupted = false; while (!terminated) { try { // 종료 대기 시간 1초로 조정 terminated = awaitTermination(1L, TimeUnit.SECONDS); } catch (InterruptedException e) { if (!interrupted) { shutdownNow(); interrupted = true; } } } if (interrupted) { Thread.currentThread().interrupt(); } } } } @DisplayName("Should wait infinitely when .close()") @Test void executorServiceCloseTest() { // given try (ExecutorService myExecutor = new MyExecutor()) { log("작업 시작"); CallableSleepTask sleepTask = new CallableSleepTask("test", 10_000L); myExecutor.submit(sleepTask); // 10 초간 테스크 실행 log("작업 진행중.. close 대기"); // 기다리지 않고 .close() 자동 호출 } } }실행 결과18:38:39.524 [ main] 작업 시작 18:38:39.527 [ main] 작업 진행중.. close 대기 (약 10초 대기 후 종료) Process finished with exit code 0테스크 종료를 위해 10초 대기가 이뤄졌습니다.close 가 조정된 대기시간인 1초 뒤에 인터럽트를 발생시켰다면 인터럽트 로그가 남았을 것이고, shutdownNow()가 호출됐다면 10초 대기없이 즉시 종료되었을 것입니다. 따라서 정정이 필요해보여요.close 메소드는 "shutdown() 을 호출하고, 작업 완료시까지 무한정 반복대기한다. 인터럽트가 발생하면 shutdownNow() 를 호출한다."
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
InterruptedExceptionThreadStopExample 질문입니다.
InterruptedExceptionThreadStopExample 를 돌리면 강의 로그에서는============= 중단 스레드가 작업 스레드를 중단 시켰습니다.인트럽트 상태 1 : true=============형태가 찍히는데 제 로컬에서는=============중단 스레드가 작업 스레드를 중단시켰습니다.인트럽트 상태 2 : false=============가 찍히는데 이건 확률적으로 로그가 찍히는 걸까요? 답변 부탁 드립니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
프로세스의 메모리 구성과 자바 메모리 구조의 상관 관계
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 저는 영한님의 강의를 듣고 자바와 스프링을 공부하고 있는 수강생입니다. 양질의 강의를 제공해 주셔서 감사합니다.강의를 전부 듣고 복습을 하던 중에 궁금한 부분이 생겨서 질문 드립니다. 섹션 2 "프로세스와 스레드" 강의에서는 프로세스의 메모리 구성에 대한 내용과,섹션 3 "스레드 시작1" 강의에서는 자바 메모리 구조에 대한 내용의 상관 관계에 대해서 이해가 어려운 부분이 있어서 질문드립니다. 프로세스의 메모리는 4가지 영역(코드, 데이터, 힙, 스택)으로 나눠서 설명해 주셨고자바의 메모리 구조는 크게 3가지 영역(메서드, 힙, 스택)으로 나눠서 설명해 주셨는데요.여기서 프로세스의 힙, 스택 영역과 자바의 힙 스택 영역이 같은 것을 의미하나요?만약 같다면, 프로세스에서 코드, 데이터 영역은 자바의 메모리 구조로 봤을 때 메서드 영역에 포함되는 개념인가요?중복되는 질문일 수 있지만.. 검색해보니, 일반적으로 프로세스당 하나의 jvm 인스턴스를 가진다고 하는 것을 확인했는데요. 그럼 한 jvm 인스턴스에서 하나의 프로세스만을 관리하고 있을 때, (프로세스의 메모리 구조 == 자바의 메모리 구조)라고 생각해도 되는 걸까요?질문 확인해 주셔서 감사합니다. 좋은 하루 되세요!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
문제 1번 동시성 오류의 이유
간단한 질문 하나가 있습니다! 혹시 문제 1번에서는 "멀티 코어" 이기 때문에 발생한 상황으로 봐도 맞을까요? count = count + 1 이 세가지 작업을 수행하긴 하지만, 한 줄이기 때문에 CPU 가 한 줄씩 수행하는 입장에서 도중에 스레드를 변경하진 않는 것 아닌가 싶은 의문이 들어서 문의드리게 되었습니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[오타 제보] pdf 4.
오타 제보 드려요 4. 스레드 제어와 생명 주기2.pdf 6페이지 이때 work 스레드는 TIMED_WAITNG부분입니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[오타 제보] pdf 10, 11 챕터
안녕하세요. 오타 제보입니다.자바 고급1편 11.동시성 컬렉션 pdf 4페이지add(): 컬렉션에 데이터를 추가한다sleep(100): 잠시 기대한다. 자바 고급1편 10. CAS-동기화와 원자적 연산 pdf 7페이지 6번째 줄 이 문제는 연산 자체가 나누어져 있기 때문에 발생한다. volatile 은 연산 차제를 원자적으로 묶어주는 기능이 아니다. 강의 감사히 듣고 있습니다!! 감사합니다.
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
업데이트 예정 강의 공개 일정이 궁금합니다.
안녕하세요.part1 강의에서 업데이트 예정 항목이 몇가지 있는데요. 해당 영상은 언제쯤 공개 되는지 궁금합니다. (업데이트) TaskGroup 실행함수 파라미터 추가 관련 업데이트 예정(업데이트 예정) 취소 핸들러 관련 내용 업데이트 예정 (API 업데이트)