본문 바로가기

ETC

OCaml 병렬 처리 #1

pool의 개념

pool은 작업을 병렬로 실행하기 위해 사용하는 도메인의 그룹

  • 도메인(Domain): OCaml의 병렬 실행 단위로, 서로 독립적으로 동작하는 경량의 스레드라고 생각할 수 있습니다.
  • pool은 여러 도메인을 묶어서 관리하며, 작업을 각 도메인에 적절히 분배하여 병렬 작업을 실행합니다.
  • 역할:
    • 병렬로 실행될 작업을 스케줄링하고 도메인 간의 작업 할당을 관리.
    • 작업이 완료될 때까지 기다리거나, 리소스를 효율적으로 사용하는 환경 제공.

 

Domainslib.Task의 주요 함수 설명

1. T.setup_pool

let pool = T.setup_pool ~num_domains:3 ()

도메인 풀을 생성하는 함수.

  • 입력:
    • num_domains: 도메인의 개수를 지정. (예: 3)
    • 주 도메인(Main Domain)을 제외하고 num_domains만큼 추가 도메인을 생성.
  • 출력:
    • pool: 생성된 도메인 풀 객체.
  • 역할:
    • 병렬 작업을 실행할 수 있는 도메인들을 초기화.
    • 작업을 여러 도메인에 분산 실행할 준비를 완료.

 

2. T.async

let a = T.async pool (fun _ -> fib_par pool (n-1))

병렬로 실행할 작업을 생성.

  • 입력:
    • pool: 도메인 풀 객체.
    • 함수: 병렬로 실행될 작업의 함수(여기서는 fib_par pool (n-1)).
  • 출력:
    • 작업 핸들(handle): 이 핸들을 사용해 작업이 끝날 때까지 기다리거나 결과를 가져올 수 있음.
  • 역할:
    • 특정 작업을 도메인 풀에서 병렬로 실행하도록 스케줄링.

 

3. T.await

let result = T.await pool a

비동기 작업의 결과를 기다리고 반환.

  • 입력:
    • pool: 도메인 풀 객체.
    • 작업 핸들(handle): T.async가 반환한 작업 핸들.
  • 출력:
    • 작업의 결과값.
  • 역할:
    • 작업이 완료될 때까지 대기한 뒤 결과값을 반환.
    • 작업이 이미 완료된 경우, 바로 결과값을 반환.

 

4. T.run

let res = T.run pool (fun _ -> fib_par pool n)

도메인 풀에서 병렬로 실행할 작업을 관리하고 실행.

  • 입력:
    • pool: 도메인 풀 객체.
    • 함수: 병렬로 실행할 최상위 작업.
  • 출력:
    • 작업의 결과값.
  • 역할:
    • 도메인 풀에서 병렬 작업을 시작하고, 결과값을 기다린 뒤 반환.

 

5. T.teardown_pool

T.teardown_pool pool

도메인 풀을 정리하고 리소스를 반환.

  • 입력:
    • pool: 도메인 풀 객체.
  • 역할:
    • 사용된 도메인을 해제하고 시스템 리소스를 반환.
    • 도메인 풀을 더 이상 사용하지 않도록 종료.

 

'ETC' 카테고리의 다른 글

GitHub PR in other branch  (0) 2024.04.25
병무청 병역의무부과 통지서 분석  (0) 2022.08.16
Challenges at LINE as a security engineer 리뷰  (0) 2021.08.30
[linux] 라이브러리 관련 설정  (0) 2021.02.25