2016-01-31 2 views
1

Я пытаюсь создать двоичное хранилище. Добавленные файлы не могут быть удалены. Все файлы хранятся в том же главном файле (storage.bin). У меня будет индекс таблицы с парами (ключ, startFilePos, fileLength).лучший способ обработки нескольких потоков в один файл

Я изо всех сил стараюсь найти лучшее решение, прежде чем начинать кодирование. Поскольку я не так разбираюсь в потоках в .net, я хотел бы получить некоторые советы по ним.

  1. несколько потоков в один файл (storage.bin) решение? Как файлы могут быть добавлены параллельно, как только я начну получать файл, i зарезервировать место на диске для него и начать записывать этот конкретный файл в зарезервированный блок, в то время как другие файлы с тем же сценарием добавляются в другие темы.

  2. Если (1) является жизнеспособным решением, является ли оно оптимальным? если нет, может вы укажете на лучший?

  3. Каков наилучший способ выделить потоки для каждого сценария добавления файлов? Кажется, что поток 1 поток/1 не является жизнеспособным решением. Я думал, что у вас есть пул потоков, и если предел достигнут, у вас есть новый файл, ожидающий, когда он будет доступен.

ответ

1
  1. несколько потоков в том же файле (storage.bin) раствор? Поскольку файлы могут быть добавлены параллельно, как только я начну получать файл, i зарезервирует для этого место на диске и начнет записывать этот конкретный файл в зарезервированный блок, в то время как другие файлы с тем же сценарием добавляются на другие темы.

Да, это может быть решение. Пока разные потоки записываются в разные неперекрывающиеся сегменты файла, проблем не будет.

  1. Если (1) является жизнеспособным решением, является ли оно оптимальным? если нет, можете ли вы указать на лучшую?

Используйте отдельные файлы и сохраните индекс в главном файле.

  1. Что такое лучший способ выделить потоки для каждого сценария добавления файлов? Кажется, что поток 1 поток/1 не является жизнеспособным решением. Что я имел в виду, чтобы иметь пул волоске и если предел достигнут, есть новый ожидание файла для одного, чтобы быть доступны

Вы только что описали, как работает пул потоков. Перед тем, как начать свой собственный, убедитесь, что вы проверили класс ThreadPool, встроенный непосредственно в структуру. Или обычай concurrency limiting task scheduler.

+0

Спасибо за быстрый ответ! Что касается (2), я ограничена конкретной проблемой для обработки всего в одном файле. Если бы это зависело от меня, я бы сохранил отдельные файлы. – Alex

+0

Тогда почему вы спрашиваете, есть ли лучший способ - вы, кажется, уже знаете ответ на этот вопрос :-) –

Смежные вопросы