• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

파이썬과 동시성관련 질문.

21.11.07 21:18 작성 조회수 220

2

안녕하세요. 강의 잘듣고 있습니다.
 
운영체제에서 배우길 현대컴퓨터는 대부분 멀티쓰레드 및 여러개의 프로세스가 스위칭이 일어나면서 동작하는 것으로 압니다.
 
예를 들어 인프런 동영상 강의를 들으면서, 파이참을 키고 있고, 만약 싱글코어 컴퓨터라고 한다면,
저 크롬과 파이참의 프로세스가 스위칭되면서 실행되고 있겟죠?
 
그런데 파이썬 코드를 짜고 파이참내에서 실행을 시킨다면,(async나 머 그런거 없이 일반적인 코드로)
 
파이썬 코드 돌아가는 것 자체가 하나의 프로세스가 되어서 크롬 프로세스와 스위칭이 되지만,
 
파이썬 코드 자체는 동시적으로 작동하는 건가요?
 
만약 async await를 붙이면 파이썬 코드를 실행시킨 프로세스도 여러개로 쪼개지는(?) 건가요?
 
약간 공전 자전 같은 느낌?

답변 1

답변을 작성해보세요.

1

안녕하세요!

말씀해주신 것처럼 컴퓨터 시각에서 보면 운영체제가 알아서 프로세스 스케줄링을 해줍니다.

운영체제가 인프런 강의, 파이썬 프로그램, 게임 프로그램을 메모리에 올려서 프로세스로 만들고 각각의 실행 우선순위를 아주 작은 타임 슬라이스로 쪼개서 스위칭하면서 작업을 진행합니다. 사용자 입장에서는 강의를 들으면서 파이썬 프로그램을 돌리는 것이 동시적으로 느껴지게 되는 것이죠. 

파이썬 프로그램이 블로킹이 되건 여러 CPU 코어를 사용하건 스레드(사용자수준)를 사용하건 운영체제는 신경쓰지 않습니다. 예를들어 게임을 하다가 게임이 모종의 이유로 다운되었을때 바탕화면에 가도 브라우저 등이 잘 동작하는 것처럼 말이죠.

사용자 수준과 운영체제 수준은 구분되어 있습니다. 물론 파이썬 프로그램과 인프런 강의에서 사용되는 메모리(RAM)에서 파이썬 프로그램이 전부 다 써버리면 인프런 강의에 영향을 끼치겠지만 단순 파이썬 프로그램이 블로킹이 되거나 동시성/병렬성으로 돌아간다고 해도 인프런 강의 프로그램과는 별개로 돌아가게 됩니다.

이제 파이썬 프로그램 입장에서 보면 만약에 async await 키워드가 붙은 경우에 코루틴 기반일 경우는 싱글 프로세스에서 싱글 스레드로, 멀티 스레드 기반일 경우에 멀티 스레딩으로, 멀티 프로세스 기반일 경우에 멀티 프로세싱으로 돌아가게 됩니다.

파이썬 프로그램이 멀티 프로세싱으로 개발된다면 파이썬 프로세스가 쪼개진다는 것보다 추가 자원(스레드, 프로세스 등)을 더 사용한다는 표현이 맞습니다!

좋은 질문 감사합니다 :)

 

 

친절한 답변 감사합니다~!

이해가 될듯 말듯 한데, 조금만 더 고민해보면 될것같습니다~!