JAMONGPROJECT

[DAY20] 병렬 처리 본문

Challenge/FASTCAMPUS 30일 챌린지

[DAY20] 병렬 처리

JAMONGPROJECT 2023. 3. 11. 14:46


프로세스와 쓰레드

 

프로세스: 실행 중인 프로그램, 자원과 쓰레드로 구성

쓰레드 : 프로세스 내에서 실제 작업을 수행

 

파이썬의 쓰레드

 

파이썬은 인터프리터 언어로서 기본적으로 싱글 쓰레드에서 순차적으로 동작. 따라서 병렬처리를 위해선 별도의 모듈 을 사용하여 수행해야 한다.

 

멀티 쓰레드

from threading import Thread
def work(work_idstartendresult):
  total = 0
  for i in range(start, end):
    total += i
  result.append(total)
if __name__ == "__main__":
  result = []
  th1 = Thread(target=work, args=(1010000, result))
  th2 = Thread(target=work, args=(21000120000, result))
  th1.start()
  th2.start()
  th1.join() # join () 메소드는 파이썬에게 프로세스가 종료 될 때까지 대기하도록 지시합니다.
  th2.join()
print(sum(result))
 

멀티 프로세싱(POOL)

 

from multiprocessing import Pool
def f(x):
  return x*x

if __name__ == '__main__':
  p = Pool(4)
  result= p.map(f,[1,2,3,4])
  p.close()
print(result)
 
 
멀티 프로세싱(Process)
 
from multiprocessing import Process
def f(x):
  print(x*x)
if __name__ == '__main__':
  numbers=[1,2,3,4]
  proc1= Process(target=f, args=(numbers[0],))
  proc1.start()
  proc2= Process(target=f, args=(numbers[1],))
  proc2.start()
  proc3= Process(target=f, args=(numbers[2],))
  proc3.start()
  proc4= Process(target=f, args=(numbers[3],))
  proc4.start()
  proc1.join()
  proc2.join()
  proc3.join()
  proc4.join()
 
 

Process vs Pool

 

Pool과 Process 모두 병렬 처리를 위해 사용되지만 차이가 존재한다. 쉽게 설명하자면, Pool은 처리할 일들
을 pool에 뿌려 놓고 알아서 병렬 처리를 하게 만드는 것이고 Process는 각 프로세스별로 할당량을 명시적으
로 적어 두고 그걸 처리하게 하는 것이다.
• 물론 이는 이해를 돕기 위해 간단하게 설명했을 뿐 실제로 둘의 차이는 조금 더 복잡하다

 

멀티 쓰레드와 멀티 프로세스

 

쓰레드는 가볍지만 파이썬의 GIL 정책으로 인해 I/O 처리를 하는 경우에만 주로 효과적이고 프로세스는 각자
가 고유한 메모리 영역을 가지기 때문에 처음 프로세스를 만들 때 시간이 조금 필요하고 더 많은 메모리를 필
요로 하지만 병렬적으로 cpu 작업을 할 수 있어서 빠르다.


 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

http://bit.ly/3Y34pE0

 

#패스트캠퍼스 #패캠챌린지 #수강료0원챌린지 #환급챌린지 #직장인인강 #직장인자기계발
#패캠인강후기 #패스트캠퍼스후기 #오공완

#한번에끝내는컴퓨터공학전공필수&인공지능심화초격차패키지Online

'Challenge > FASTCAMPUS 30일 챌린지' 카테고리의 다른 글

[DAY22] DB연동과 정규식  (0) 2023.03.13
[DAY21] DB연동과 정규식  (0) 2023.03.12
[DAY19] 병렬 처리  (0) 2023.03.10
[DAY18] 파일 입출력  (0) 2023.03.09
[DAY17] 파일 입출력  (0) 2023.03.08
Comments