Qt Concurrent

Qt Concurrent 모듈은 뮤텍스, 읽기-쓰기 잠금, 대기 조건 또는 세마포어와 같은 저수준 스레딩 프리미티브를 사용하지 않고도 멀티스레드 프로그램을 작성할 수 있는 상위 수준의 API를 제공합니다. Qt Concurrent 으로 작성된 프로그램은 사용 가능한 프로세서 코어 수에 따라 사용되는 스레드 수를 자동으로 조정합니다. 즉, 오늘 작성된 애플리케이션은 향후 멀티코어 시스템에 배포할 때 계속 확장할 수 있습니다.

Qt Concurrent 에는 공유 메모리(비분산) 시스템을 위한 MapReduce 및 FilterReduce 구현과 GUI 애플리케이션에서 비동기 계산을 관리하기 위한 클래스 등 병렬 목록 처리를 위한 함수형 프로그래밍 스타일 API가 포함되어 있습니다:

Qt Concurrent 여러 STL 호환 컨테이너와 이터레이터 유형을 지원하지만, QList 와 같은 랜덤 액세스 이터레이터가 있는 Qt 컨테이너에서 가장 잘 작동합니다. 맵과 필터 함수는 컨테이너와 시작/끝 이터레이터를 모두 받아들입니다.

STL 이터레이터 지원 개요:

이터레이터 유형예제 클래스지원 상태
입력 이터레이터지원되지 않음
출력 이터레이터지원되지 않음
포워드 이터레이터std::slist지원됨
양방향 이터레이터std::list지원됨
랜덤 액세스 이터레이터QList, std::vector지원 및 권장

랜덤 액세스 이터레이터는 컨테이너의 임의의 지점으로 건너뛸 수 있으므로 Qt Concurrent 가 많은 수의 경량 항목을 반복하는 경우 더 빠를 수 있습니다. 또한 랜덤 액세스 반복기를 사용하면 Qt Concurrent 에서 QFuture::progressValue() 및 QFutureWatcher::progressValueChanged()를 통해 진행률 정보를 제공할 수 있습니다.

맵핑된() 및 필터링된()과 같은 제자리에서 수정하지 않는 함수는 호출 시 컨테이너의 복사본을 만듭니다. STL 컨테이너를 사용하는 경우 이 복사 작업에 시간이 걸릴 수 있으며, 이 경우 컨테이너의 시작 및 종료 이터레이터를 대신 지정하는 것이 좋습니다.

모듈 사용하기

Qt 모듈을 사용하려면 직접 또는 다른 종속성을 통해 모듈 라이브러리에 링크해야 합니다. CMakeqmake를 비롯한 여러 빌드 도구가 이를 지원합니다.

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.