Структурированное хранилище
У меня есть файл в формате структурированного хранилища. Мне было интересно, если этот формат будет доступен одновременно потоки.
Это означает, что несколько потоков читают разные потоки одновременно. Цель состоит в том, чтобы загрузить файл быстрее.
Когда я ссылаюсь на файл, я имею в виду тот, который представляет информацию CAD.
2 ответа
Простой ответ - да.
Более длинный ответ - это структурированное хранилище, являющееся частью COM, а модель потоков COM (иногда называемая моделью квартир) отличается от модели потоков Win32 и имеет свои собственные правила и API для сортировки данных по квартирам.
Прежде чем приступить к этому, спросите себя, действительно ли ваш механизм хранения должен быть структурированным хранилищем... ИМО не дает вам намного больше стандартного ввода-вывода, за исключением целого ряда проблем (с точки зрения многопоточности)
Фактически структурированная часть довольно проста, и любой XML-файл гораздо более структурирован.
Вопрос с потоками всегда сводится к совместному использованию ресурсов. Определите, какие ресурсы будут использоваться совместно, а затем выясните, можно ли их использовать таким образом, чтобы большие объемы обработки могли выполняться параллельно.
Если вы создаете много небольших независимых структур данных из оглавления в начале файла, это может принести пользу от потоков. Каждый поток будет знать независимо от других потоков, какую часть файла читать и что делать с данными, которые он читает, без взаимодействия с другими потоками.
Если вы строите большое дерево или иерархию связанных структур данных или если местоположение следующего бита данных зависит от предыдущего бита данных, то более чем несколько потоков могут быть связаны, ожидая друг друга. Вы по-прежнему можете извлечь выгоду из одного потока, который читает и ставит в очередь фрагменты данных для обработки другим потоком.
Скорее всего, у вас будет некоторый баланс между приведенными выше примерами. У вас может быть один поток для чтения файлов и небольшой пул потоков обработки. Потоки обработки могут поставить в очередь результаты для одного потока сборки, чтобы организовать в какую-либо иерархию или взаимосвязи.
Если у вас есть потоки, ожидающие друг друга, то вам не нужна нить. Если у вас есть независимые порции данных, которые могут быть атомарно добавлены в очереди для обработки, то потоки начинают светиться.
В зависимости от внешних факторов потоки могут незаметно взаимодействовать друг с другом. Например, несколько потоков чтения могут увеличить время поиска жестких дисков, что приведет к снижению производительности.