Qt Concurrent
Qt Concurrent 모듈은 뮤텍스, 읽기-쓰기 잠금, 대기 조건, 세마포어와 같은 저수준 스레딩 기본 요소를 사용하지 않고도 멀티스레드 프로그램을 작성할 수 있게 해주는 고수준 API를 제공합니다. Qt Concurrent 로 작성된 프로그램은 사용 가능한 프로세서 코어 수에 따라 사용되는 스레드 수를 자동으로 조정합니다. 즉, 오늘 작성된 애플리케이션은 향후 멀티코어 시스템에 배포되더라도 계속해서 확장성을 유지할 수 있습니다.
Qt Concurrent 에는 병렬 리스트 처리를 위한 함수형 프로그래밍 스타일의 API가 포함되어 있으며, 여기에는 공유 메모리(비분산) 시스템을 위한 MapReduce 및 FilterReduce 구현과 GUI 애플리케이션에서 비동기 계산을 관리하기 위한 클래스가 포함됩니다:
- 동시 Map 및 Map-Reduce
- QtConcurrent::map()는 컨테이너 내의 모든 항목에 함수를 적용하여 항목을 제자리에서 수정합니다.
- QtConcurrent::mapped()는 map()과 유사하지만, 수정된 내용을 담은 새로운 컨테이너를 반환한다는 점이 다릅니다.
- QtConcurrent::mappedReduced()는 mapped()와 유사하지만, 수정된 결과들이 단일 결과로 축소(reduce)되거나 병합(fold)된다는 점이 다릅니다.
- 병렬 필터 및 필터-리듀스
- QtConcurrent::filter()는 필터 함수의 결과에 따라 컨테이너에서 모든 항목을 제거합니다.
- QtConcurrent::filtered()는 filter()와 비슷하지만, 필터링된 결과가 담긴 새로운 컨테이너를 반환한다는 점이 다릅니다.
- QtConcurrent::filteredReduced()는 filtered()와 유사하지만, 필터링된 결과가 단일 결과로 축소되거나 폴딩된다는 점이 다릅니다.
- 동시 실행
- QtConcurrent::run()는 다른 스레드에서 함수를 실행합니다.
- 동시 작업
- QtConcurrent::task()는 ` QtConcurrent::QTaskBuilder`의 인스턴스를 생성합니다. 이 객체는 매개변수를 조정하거나 별도의 스레드에서 태스크를 시작하는 데 사용할 수 있습니다.
- QFuture 는 비동기 계산의 결과를 나타냅니다.
- QFutureIterator QFuture 를 통해 사용할 수 있는 결과를 순회할 수 있게 해줍니다.
- QFutureWatcher 신호-슬롯(signals-and-slots)을 사용하여 ` QFuture `를 모니터링할 수 있게 해줍니다.
- QFutureSynchronizer 여러 QFuture를 자동으로 동기화하는 편의 클래스입니다.
- QPromise QFuture 에 비동기 계산의 진행 상황과 결과를 보고하는 방법을 제공합니다. 의 요청에 따라 작업을 일시 중지하거나 취소할 수 있습니다. QFuture
Qt Concurrent 여러 STL 호환 컨테이너 및 이터레이터 유형을 지원하지만, QList 와 같이 랜덤 액세스 이터레이터를 가진 Qt 컨테이너에서 가장 잘 작동합니다. map 및 filter 함수는 컨테이너와 begin/end 이터레이터를 모두 받아들입니다.
STL 이터레이터 지원 개요:
| 이테레이터 유형 | 예시 클래스 | 지원 상태 |
|---|---|---|
| 입력 이터레이터 | 지원되지 않음 | |
| 출력 이터레이터 | 지원되지 않음 | |
| 전방 이터레이터 | std::forward_list | 지원됨 |
| 양방향 이터레이터 | std::list | 지원됨 |
| 임의 접근 이터레이터 | QList, std::vector | 지원되며 권장됨 |
Qt Concurrent 가 대량의 경량 항목을 순회하는 경우, 랜덤 액세스 이터레이터는 컨테이너 내의 임의 지점으로 건너뛸 수 있으므로 더 빠른 성능을 보일 수 있습니다. 또한, 랜덤 액세스 이터레이터를 사용하면 Qt Concurrent 에서 QFuture::progressValue() 및 QFutureWatcher::progressValueChanged()를 통해 진행 상황을 확인할 수 있습니다.
mapped() 및 filtered()와 같은 비인플레이스 수정 함수는 호출 시 컨테이너의 복사본을 생성합니다. 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 Lesser General Public License 버전 3 또는 GNU General Public License 버전 2와 같은 자유 소프트웨어 라이선스 하에서도 사용할 수 있습니다. 자세한 내용은 Qt 라이선싱을 참조하십시오.
© 2026 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.