FUNDAMENTAL | 26. 컴퓨터 파워 UP

yeonk·2021년 11월 10일
0

aiffel-ai-bootcamp

목록 보기
38/38
post-thumbnail

20211110

❗ 파이썬 3.7.9 버전 기준의 게시글 입니다.



🤍읽기 전 참고글

FUNDAMENTAL | 02. Linux 운영체제






1. 멀티태스킹


멀티 태스킹의 2가지 동작 방식: 동시성, 병렬성






동시성(Concurrency)

1개의 processor가 여러 task 동시 수행하는 것

  • 바운드(bound): 대기 상태
    • I/O 바운드: 입력, 출력에서의 데이터처리에 시간이 소요
    • CPU 바운드: 많은 계산으로 시간 소요 (복잡한 수식 계산, 그래픽 작업 등)



  • 동기(synchronized) 방식

    • 앞 작업이 종료 후 다음 작업을 수행

    • 순차적 실행

    • 요청, 응답 연속적 실행



  • 비동기(asynchronous) 방식

    • 바운드되고 있는 작업을 기다리는 동안 다른 일을 처리

    • 비순차적 실행

    • 요청, 응답 비연속적

    • 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행

    • 중간 실행 코드는 콜백함수로 연결하기도 함






병렬성(Parallelism)

유사한 task를 여러 processor가 동시 수행






2. Process(프로세스)


프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위






Thread(스레드)

프로세스(프로그램) 내에서 실행되는 흐름의 단위






프로파일링(Profiling)

애플리케이션에서 가장 자원이 집중되는 지점을 정밀하게 찾아내는 기법

  • 코드에서 시스템의 어떤 부분이 느려지는지, RAM을 많이 사용하고 있는 부분이 어디인지 등의 확인을 위한 기법

  • 프로파일러: 애플리케이션을 실행 시, 각 함수 실행에 소요되는 시간을 확인하는 프로그램(코드의 병목 확인, 성능 측정)

  • 하기 내용들을 통한 상태 확인을 코딩하는 것

    • 맥(mac): 활성 상태 보기(activity monitor)

    • 윈도우(windows): 작업 관리자(task manager)

    • 우분투(Ubuntu): 작업 관리자(System Monitor)






파이썬에서 확인할 땐 아래와 같은 모듈 사용

# 1
%timeit

# 2
import time
time.time()

# 4
import timeit
timeit.Timer()






프로파일링에 좋은 패키지/모듈: profile 모듈, cProfile모듈, line_profiler 패키지






3. Scale Up vs Scale Out


Scale-Up: 한 대의 컴퓨터 성능을 최적화
Scale-Out: 다수의 컴퓨터를 한 대처럼 사용






4. 풀(Pool)


스레드, 프로세스들로 가득 찬 풀장과 같다.

풀 생성 시 태스크들에 대해 자동으로 스레드(또는 프로세스)들을 할당 및 종료한다.






  • 풀을 만드는 방법
    • 직접 만드는 방법: Queue 사용
    • concurrent.futures 라이브러리 사용: ThreadPoolExecutor , ProcessPoolExecutor클래스를 이용






concurrent.futures 모듈

4가지 기능

  • Executor 객체

    • ThreadPoolExecutor 객체 (Executor의 서브클래스)

    • ProcessPoolExecutor 객체 (Executor의 서브클래스)

  • Future 객체






with ThreadPoolExecutor() as executor:
    future = executor.submit(함수이름, 인자)
  • Executor 객체가 제공하는 메소드: submit(), map(), shutdown()






추가 자료


Difference Between Concurrency and Parallelism

Concurrency vs. Parallelism

What do the terms “CPU bound” and “I/O bound” mean?

위키백과 - 프로세스

파이썬 프로파일러 - cProfile, profile

line profiler를 사용하여 파이썬의 각 라인이 어떻게 돌아가는지를 알아보자.

다중 서버 환경에서 Session은 어떻게 공유하고 관리할까? - 1편 (Scale-Up / Scale-Out이란?)

threading — Thread-based parallelism

concurrent.futures - Launching parallel tasks - Python 3.7.9 documentation

0개의 댓글