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 |