• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

강의 - 섹션1. Multithreading 질문

21.11.23 14:57 작성 조회수 181

0

안녕하세요, 강사님.
우선 다시한번 좋은강의에 감사드립니다.
 
섹션1을 다 듣고나서, 정리를 하고 궁금한 부분들을 한번에 질문드립니다.
제가 컴퓨터쪽 전공이 아니라서 용어나 잘 모르는 부분이 많아 질문이 깔끔하지 않은점 이해 부탁드립니다.
 
미리 답변에 감사드립니다.
 
1. threading.Lock()이 어느한쓰레드에서 acquire()되는 순간, 그 프로세스 내 모든 thread들은 그 threading.Lock()이 release() 될때까지 작동을 못한다고 이해하면 되나요?
 
2. (강사님 이전강의를 안들어서 with문이 익숙하지 않네요ㅠㅠ 구글링을 최대한 해보며 이해하려고 노력해봤는데...) with문 안에서는 그 with문 안에 있는 모든 thread 작업들이 끝나야지 with문을 나온다고 보면 되나요?
 
3. producer and consumer 개념에서, Queue에 아직 무엇인가가 남아있다면, consumer는 그걸 다 처리할때까지 기다리나요? 아니면 Queue에는 무엇인가가 남아있더라도 consumer를 종료하면 그대로 끝나버리나요? (사실 후자가 맞을것 같은데... Queue에 남아있는 상태에서 consumer가 종료되는 코드를 스스로 좀 구현해보려고 했는데 잘안되네요)
 
4. concurrent.futures.ThreadPoolExecutor로 submit()을 한 결과에 result()를 확인하고자하면, 그 thread의 계산이 끝나서 result()에 값(return)이 들어올때까지 기다리는것 같은데 맞나요? (즉... thread1실행시 그 위에서 thread2를 실행하는 중인데, thread2의 result()를 보고자하면 thread2가 끝날때까지 thread1이 더이상 진행되지 않는것이 맞나요?)
 
5. 4번과 비슷하게, map은 단순히 submit 여러개를 편하게 해주는것 같은데... map의 결과(generator)를 list()로 감싸고 프린트하려고 하면 똑같이 그 thread가 끝날때까지 기다리나요?
 
6. 어떤 공유변수를 동기화하면서 가야한다면 멀티스레드/멀티프로세스가 성능의 측면에서는 이득이 없는것이 맞나요?

답변 1

답변을 작성해보세요.

1

안녕하세요~~
 
해당 강의는 전체 강의를 다 듣고 질문하시면 범위를 좁히실 수 있습니다.
 
1. 네
 
2. with context는 별도의 구문안에서 반드시 실행해야하는 작업을 수행하는데 의미가 있어여!
 
3. 옵션으로 조절 가능합니다. 레퍼런스 확인하세요!
 
4. 네
 
5. 마찬가지로 데몬스레드 옵션일 경우 작업 중 or 작업 이후로 사용할 수 있습니다. 스레드 기초 파트가
중요합니다.
 
6. 경우에 따라 다릅니다. 멀티 스레드가 유리한 작업일 수도 있고 고속 병렬로 연산처리라면
멀티 프로세스가 압도적으로 빠릅니다.