Qt Concurrent
Qt Concurrent 모듈은 뮤텍스, 읽기-쓰기 잠금, 대기 조건 또는 세마포어와 같은 저수준 스레딩 프리미티브를 사용하지 않고도 멀티스레드 프로그램을 작성할 수 있는 상위 수준의 API를 제공합니다. Qt Concurrent 으로 작성된 프로그램은 사용 가능한 프로세서 코어 수에 따라 사용되는 스레드 수를 자동으로 조정합니다. 즉, 오늘 작성된 애플리케이션은 향후 멀티코어 시스템에 배포할 때 계속 확장할 수 있습니다.
Qt Concurrent 에는 공유 메모리(비분산) 시스템을 위한 MapReduce 및 FilterReduce 구현과 GUI 애플리케이션에서 비동기 계산을 관리하기 위한 클래스 등 병렬 목록 처리를 위한 함수형 프로그래밍 스타일 API가 포함되어 있습니다:
- 동시 맵과 맵-리듀스
- QtConcurrent::map()는 컨테이너의 모든 항목에 함수를 적용하여 제자리에서 항목을 수정합니다.
- QtConcurrent::mapped()는 수정 사항이 포함된 새 컨테이너를 반환한다는 점을 제외하면 map()과 비슷합니다.
- QtConcurrent::mappedReduced()는 수정된 결과가 단일 결과로 축소되거나 접힌다는 점을 제외하면 mapped()와 비슷합니다.
- 동시 필터 및 필터-축소
- QtConcurrent::filter()는 필터 함수의 결과에 따라 컨테이너에서 모든 항목을 제거합니다.
- QtConcurrent::filtered()는 필터링된 결과가 포함된 새 컨테이너를 반환한다는 점을 제외하면 filter()와 비슷합니다.
- QtConcurrent::filteredReduced()는 필터링된 결과가 단일 결과로 축소되거나 접힌다는 점을 제외하면 filtered()와 비슷합니다.
- 동시 실행
- QtConcurrent::run()는 다른 스레드에서 함수를 실행합니다.
- 동시 작업
- QtConcurrent::task()는 QtConcurrent::QTaskBuilder 의 인스턴스를 만듭니다. 이 객체는 매개 변수를 조정하고 별도의 스레드에서 작업을 시작하는 데 사용할 수 있습니다.
- QFuture 는 비동기 계산의 결과를 나타냅니다.
- QFutureIterator QFuture 를 통해 제공되는 결과를 반복할 수 있습니다.
- QFutureWatcher 신호 및 슬롯을 사용하여 QFuture 을 모니터링할 수 있습니다.
- QFutureSynchronizer 는 여러 QFutures를 자동으로 동기화하는 편의 클래스입니다.
- QPromise 비동기 계산의 진행 상황과 결과를 QFuture 에 보고하는 방법을 제공합니다. QFuture 에서 요청할 때 작업을 일시 중단하거나 취소할 수 있습니다.
Qt Concurrent 여러 STL 호환 컨테이너와 이터레이터 유형을 지원하지만, QList 와 같은 랜덤 액세스 이터레이터가 있는 Qt 컨테이너에서 가장 잘 작동합니다. 맵과 필터 함수는 컨테이너와 시작/끝 이터레이터를 모두 받아들입니다.
STL 이터레이터 지원 개요:
이터레이터 유형 | 예제 클래스 | 지원 상태 |
---|---|---|
입력 이터레이터 | 지원되지 않음 | |
출력 이터레이터 | 지원되지 않음 | |
포워드 이터레이터 | std::slist | 지원됨 |
양방향 이터레이터 | std::list | 지원됨 |
랜덤 액세스 이터레이터 | QList, std::vector | 지원 및 권장 |
랜덤 액세스 이터레이터는 컨테이너의 임의의 지점으로 건너뛸 수 있으므로 Qt Concurrent 가 많은 수의 경량 항목을 반복하는 경우 더 빠를 수 있습니다. 또한 랜덤 액세스 반복기를 사용하면 Qt Concurrent 에서 QFuture::progressValue() 및 QFutureWatcher::progressValueChanged()를 통해 진행률 정보를 제공할 수 있습니다.
맵핑된() 및 필터링된()과 같은 제자리에서 수정하지 않는 함수는 호출 시 컨테이너의 복사본을 만듭니다. STL 컨테이너를 사용하는 경우 이 복사 작업에 시간이 걸릴 수 있으며, 이 경우 컨테이너의 시작 및 종료 이터레이터를 대신 지정하는 것이 좋습니다.
모듈 사용하기
Qt 모듈을 사용하려면 직접 또는 다른 종속성을 통해 모듈 라이브러리에 링크해야 합니다. CMake 및 qmake를 비롯한 여러 빌드 도구가 이를 지원합니다.
CMake로 빌드하기
find_package()
명령을 사용하여 Qt6
패키지에서 필요한 모듈 컴포넌트를 찾습니다:
find_package(Qt6 REQUIRED COMPONENTS Concurrent) target_link_libraries(mytarget PRIVATE Qt6::Concurrent)
CMake로 빌드 개요도 참조하세요.
qmake로 빌드하기
qmake로 빌드하도록 모듈을 구성하려면 프로젝트의 .pro 파일에 QT
변수의 값으로 모듈을 추가합니다:
QT += concurrent
예제
모듈 진화
Qt Concurrent 에 Qt 6 시리즈에 적용된 모듈 API와 기능의 중요한 변경 사항이 나열되어 있습니다.
라이선스
Qt Concurrent 모듈은 The Qt Company의 상용 라이선스에 따라 사용할 수 있습니다. 또한 무료 소프트웨어 라이선스에 따라 사용할 수 있습니다: GNU 약소 일반 공중 사용 허가서, 버전 3 또는 GNU 일반 공중 사용 허가서, 버전 2. 자세한 내용은 Qt 라이선스를 참조하십시오.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.