Использование классов передачи сообщений параллельного исполнения VS2010 (unbounded_buffer и т. Д.) В потоках не во время выполнения
Мне нравится удобство unbounded_buffer, но я также хочу использовать этот класс в потоках, о которых среда выполнения параллелизма ничего не знает. В моих тестах это работает нормально. Есть ли потенциальные проблемы с этим подходом?
1 ответ
Вот что я получил от MSFT по этому вопросу:
Да, вы можете использовать блоки сообщений (например, unbounded_buffer) в потоке, которые создаются вручную с помощью CreateThread.
Сообщения не могут пересекать границы dll в том смысле, что их размещение и удаление должны происходить в одной и той же dll. Некоторые блоки сообщений, такие как преобразователь, выделяют новые сообщения. Так что они страдают от той же проблемы. unbounded_buffer> идеально подходит для использования, за исключением того, что не решает вышеуказанную проблему. Аргумент шаблона типа ссылается на тип полезной нагрузки в сообщении (то есть сообщении). Это не тип конверта.
В устойчивом состоянии пропускная способность сети передачи данных очень хорошая. Основным источником снижения производительности является связывание и отсоединение блоков сообщений при настройке сети. В Visual Studio 2010 команды запуска сообщений, такие как send и asend, пострадали от этого снижения производительности. Мы решили эту проблему в следующем выпуске Visual Studio. Не планируется переносить исправление на VS2010. Возможный обходной путь - реализовать простой блок сообщений ISource, который всегда подключен к сети потока данных. Используйте этот блок для инициирования сообщений в сеть (_Originator в agents.h является примером для блока ISource).