Какой самый быстрый способ записи последовательных данных на диск в Mac OS X? - PullRequest
6 голосов
/ 16 июня 2011

Мне нужен способ хранения больших блоков данных (~ 1-2 МБ) с высокой скоростью (~ 200-300 Мбит / с).
После некоторых исследований я нашел несколько вариантов:

  • aio_write
  • DIRECT_IO
  • Углеродный файловый менеджер PBWriteForkAsync()
  • по умолчанию fwrite(), завернутый в блок и отправленный через GCD
  • NSData's appendData в NSOperation
  • ...

Эта вики-страница описывает состояние aio_write в Linux. Я не нашел похожую страницу о состоянии aio_write для Mac OS X.

NSOperation или Blocks + GCD, кажется, техника для достижения неблокирующего ввода-вывода. Он используется в нескольких библиотеках ввода-вывода с открытым исходным кодом (например, https://github.com/mikeash/MAAsyncIO)

Кто-то с подобной проблемой нашел подходящее решение?
В настоящее время я стремлюсь к PBWriteForkAsync, так как для этого нужны некоторые параметры Он также должен быть 64-битным.

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Я не очень хорошо знаю MacOS, но я бы также попробовал системные вызовы open и write из unistd.h с опцией неблокирования O_NONBLOCK. ссылка

1 голос
/ 06 июля 2011

Вы должны использовать небуферизованный ввод / вывод для записи, в Carbon это FSWriteFork() с kFSNoCacheBit, в BSD fcntl() с F_NOCACHE.

Вместо того чтобы использовать неблокирующий ввод-вывод системы, вы можете рассмотреть возможность создания рабочего потока для последовательной записи блоков с использованием очереди. Это даст вам больше контроля и может оказаться проще, особенно если вы хотите следить за очередью, чтобы убедиться, что вы в курсе или нет.

См. здесь для получения дополнительной информации.

...