inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)

Thread(4) - Lock, Deadlock 강의를 듣다가 질문드립니다.

250

JY

작성한 질문수 1

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요. Thread(4) - Lock, Deadlock 강의를 듣다가 궁금한 점이 생겨서요.
파이썬은 GIL로 한번에 한 스레드만 실행되도록 하고, 제가 멀티스레드를 생성해도 결국 한 스레드만 실행되게 한다고 배웠습니다.
그런데 보여주신 아래 예제에서는 값이 제대로 반영안되는 걸 보여주셨는데요..
 
local_copy = self.value local_copy += 1 time.sleep(0.1) self.value = local_copy
 
어차피 GIL때문에 락이 잠겨서 한번에 한 스레드밖에 실행되지 않는데, 이게 값이 왜 제대로 반영안되는건지 궁금합니다.
여러 스레드들은 내부적으로 큐로 관리되고, 한 스레드가 제대로 끝나기 전에는 다른 스레드는 실행되지 않을테니 저 부분이 실행되고 나서야 다른 스레드가 접근할텐데요..
GIL자체가 공유자원에 대한 thread safe하지 않기때문에 그걸 보장하기 위해 인터프리터를 잠가버리는거라고 이해했는데 제 이해가 틀린걸까요 ㅠ GIL이 reference count를 thread safe하게 유지시키기 위해 필요하다고 알고있는데, GIL이 있음으로써 보호해주는건 reference count 하나뿐일까요? GIL이 있음에도 불구하고 멀티스레딩을 thread safe하게 구현할 때는 개발자가 lock을 매번 걸어줘야하는걸까요?

python 동시성

답변 2

0

chang-seok You

GIL은 한번에 실행중인 스레드가 1개임을 보장하는 것으로 알고있어요. 한 스레드가 온전히 동작한다는 것은 컴퓨터가 이해하기엔 힘든 개념인것 같아요.

특히 time.sleep(0,1)을 하는 순간 다른 스레드가 실행되도록 실행이 멈출테니 데이터를 보장하기 더 어려워지는것 같아요.

sleep에 대한 자료 링크입니다.(파이썬은 아닙니다) https://kldp.org/node/125415

0

좋은사람

열심히 하시네요!

아니요~ 내부적으로 CPYTHON (파이썬 언어를 만든 구현 원리)에서 자동으로 

말씀하신대로 실행되도록 구현되어 있습니다.

Pros and Cons 관련하여 질문드립니다

0

72

1

daemon=True가 안 먹히네요

0

97

2

threadpoolexecutor.submit 실행 시 순차 실행

0

222

2

queue 를 사용하는 이유?

1

241

1

멀티프로세싱 관련 질문

0

189

1

python gil 삭제

0

371

1

4분:59초 질문 그룹쓰레드 (5). 대기중인 작업 -> Queue -> 완료 상태조사 -> 결과 또는 예외 -> 단일화(캡슐화) 에 관해서

0

174

1

데몬스레드 설명

0

241

1

작업영역 질문

0

310

1

cmd에서 code작성시 기존에 깔아둔 vscode에서 이상한 화면이 뜨네요

0

290

1

ThreadPoolExecutor에서 작업중인 쓰레드가 있을때 대기할수 있는 방법이 있는지요?

0

286

1

py_ad_2_5_2 Sharing State의 Argument 부분

0

301

1

Thread(4) 16:10 스레드 질문

0

343

1

파이썬 병렬처리 관련 질문이 있습니다.

0

352

1

10:10쯤에 질문있습니다.

0

257

1

multiprocessing(5) - Queue 공유 질문 in multiprocess

0

436

1

seleniumwire multiprocessing 에러

0

729

1

logging과 print 차이 질문입니다..!

0

671

1

확장프로그램 질문입니다

0

299

1

KeyboardInterrupt 시 p.join에서 exception 발생

0

420

1

경쟁상태,교착상태, 메모리영역

0

259

1

ProcessPoolExecutor 사용 시 pid 증가

0

354

1

multiprocess 환경에서 특정 Process에 문제가 있거나 죽었을때 처리 방법

0

754

1

ThreadPoolExecutor 에서 max_workers 질문입니다.

2

1533

1