Библиотека параллельных шаблонов Microsoft: кто-нибудь смотрел, как трудно было бы портировать на POSIX / Linux? - PullRequest
5 голосов
/ 31 марта 2011

Книга выпущена:

http://blogs.msdn.com/b/vcblog/archive/2011/03/15/10139453.aspx

Мне просто интересно, прошел ли кто-нибудь реализацию и видел, как легко было бы украсть / перенести в POSIX? Использует ли он, например, управляемые расширения C ++? Есть какие-нибудь мысли об этом вообще или о его библиотеке Aynchronous Agents? Было бы неплохо, если бы был эквивалент std :: или boost ::.

Ответы [ 2 ]

2 голосов
/ 04 января 2015

Похоже, что Microsoft Parallel Patterns Library (PPL) теперь действительно кроссплатформенная!

Похоже, что с недавним изменением Microsoft последней версии их C ++ REST SDK (Касабланка) они теперь поддерживают все платформы (Windows / Mac / Linux / Android и iOS).

Интересно то, что этот REST SDK также связывает версию библиотеки параллельных шаблонов (PPL), однако она находится в пространстве имен pplx (обратите внимание на x).

Так что вместо:

#include <ppltasks.h>

.. его ...

#include <pplx/pplxtasks.h>

Как вы можете видеть на странице Microsoft MSDN здесь: http://msdn.microsoft.com/en-us/library/jj950081.aspx они используют задачи PPLX и связывают их с помощью синтаксиса .then ().

пример кода со страницы выше:

// Creates an HTTP request and prints the length of the response stream.
pplx::task<void> HTTPStreamingAsync()
{
    http_client client(L"http://www.fourthcoffee.com");

    // Make the request and asynchronously process the response. 
    return client.request(methods::GET).then([](http_response response)
    {
        // Print the status code.
        std::wostringstream ss;
        ss << L"Server returned returned status code " << response.status_code() << L'.' << std::endl;
        std::wcout << ss.str();

        // TODO: Perform actions here reading from the response stream.
        auto bodyStream = response.body();

        // In this example, we print the length of the response to the console.
        ss.str(std::wstring());
        ss << L"Content length is " << response.headers().content_length() << L" bytes." << std::endl;
        std::wcout << ss.str();
    });

    /* Sample output:
    Server returned returned status code 200.
    Content length is 63803 bytes.
    */
}

Также в этом году на CPPCon 2014 в выступлении под названием «Использование C ++ для подключения к веб-службам» демонстрируется использование Casablanca и PPLX от eclipse, работающих на Android.

Это видео здесь: https://www.youtube.com/watch?v=WvaxcicwIss#t=1638

Наконец, Casablanca REST SDK можно найти здесь: https://casablanca.codeplex.com/

2 голосов
/ 03 ноября 2012

DarkDust - Boost поддерживает параллелизм на уровне потоков, в то время как PPL и TBB предоставляют основанную на задачах абстракцию поверх пула потоков и используют подход стандартных библиотек и алгоритмов и контейнеров. Это устраняет многие головные боли, связанные с планированием и управлением ресурсами. Некоторые функции параллелизма на основе задач теперь начинают поддерживаться и в C ++ 11, в частности std :: future и другие функции, связанные с асинхронностью.

Ghita - PPL не использует управляемые расширения, это чисто нативный код, но не на основе всех шаблонов. Реализация Windows работает поверх Concurrency Runtime, ConcRT. См. http://msdn.microsoft.com/en-us/library/gg663535.aspx для более подробной информации. Реализация Intel предоставляет API-интерфейс, совместимый с исходным кодом, для подмножества PPL. См. http://threadingbuildingblocks.org/docs/help/reference/appendices/ppl_compatibility.htm для обсуждения совместимости TBB / PPL.

Алексей - Версия Intel для Unix работает сверх их времени выполнения. В Windows TBB 3.0 также может работать поверх ConcRT, в зависимости от того, как вы его связываете. Смотри здесь http://software.intel.com/en-us/blogs/2010/05/04/tbb-30-new-today-version-of-intel-threading-building-blocks

Книга доступна на Amazon и т. Д., А также на MSDN. http://msdn.microsoft.com/en-us/library/gg675934.aspx

...