Увеличение количества рабочих потоков в Касабланке - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь использовать threadPool с помощью cpprestsdk. Ниже приведен тестовый код для использования внутреннего пула потоков. TaskA и TaskB - фиктивные задачи. Добавлены задержки для имитации длительной обработки задач.

тестовый код.

#include "cpprest/asyncrt_utils.h"
#include <map>
using namespace std;
using namespace utility;
void TaskA() {
    sleep(rand()%5);
    cout <<"taskA executing .."<< endl;
}
void TaskB() {
    sleep(rand()%5);
    cout <<"taskB executing .."<< endl;
}
std::map<int,std::function<void(void)>> taskIdMap = {
    {0,     TaskA},
    {1,     TaskB}
};
int main() {
    srand(time(NULL));
    int cnt = 100;  // 100 task to dispatch
    while(cnt--) {
        int taskId = rand()%2;  // simulates an receipt of an event or task
        auto func = taskIdMap[taskId];
        pplx::task<int>([func,taskId]()
        {
            func();
            return taskId;

        })
        .then([](pplx::task<int> prevTask)
        {
            auto id = prevTask.get();
            cout <<(id == 0?"TaskA is done !":"TaskB is done !") <<endl;
        });
    }
    cout<<"No more task to dispatch. Main thread is free now"<<endl;
    getchar();
}


/*
system Ubuntu 18.04 =>
CMakeLists.txt
    cmake_minimum_required (VERSION 3.5)
    set(CMAKE_BUILD_TYPE Debug)
    project(TEST)
    message(STATUS "Compiling TestFile : ${PROJECT_NAME}")
    set (CMAKE_CXX_STANDARD 14)
    message(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")
    set (CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
    set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
    add_executable(${PROJECT_NAME} test.cpp)
    set(REST_LIBRARIES "-lcpprest")
    set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -g -fsanitize=address")
    target_link_libraries(${PROJECT_NAME} ${REST_LIBRARIES})
*/

Как увеличить количество потоков, по умолчанию в моей системе (Ubuntu) создается 40 потоков. Есть вызов функции ref , но я не уверен, как его использовать.

...