Necesito una forma de almacenar grandes fragmentos de datos (~ 1-2MB) a una velocidad alta (~ 200-300Mbit/s).
Después de algunas investigaciones me encontré con varias opciones:¿Cuál es la manera más rápida de escribir datos secuenciales en un disco bajo Mac OS X?
aio_write
- Direct_IO
- carbono del Administrador de archivos
PBWriteForkAsync()
- predeterminado
fwrite()
, envuelto en un bloque y se envían a través de GCD - NSData de
appendData
en un NSOperation - ...
Este wiki page describe el estado de aio_write
bajo Linux. Lo que no encontré fue una página similar sobre el estado de aio_write
para Mac OS X.
NSOperation o Blocks + GCD parece ser una técnica para lograr IO sin bloqueo. Se utiliza en varias bibliotecas IO de código abierto (por ejemplo, https://github.com/mikeash/MAAsyncIO)
¿Alguien con un problema similar encontró una solución adecuada?
Actualmente tiendo a PBWriteForkAsync
ya que toma algunos parámetros de 'ajuste'. También debe ser seguro a 64 bits.
No hay forma de distinguirlo de los puntos de referencia. También podría considerar mmap(). – wnoise
Definitivamente voy a medir. Actualmente estoy buscando todas las opciones disponibles. –
bajo osx aio_write no es una muy buena opción ya que no hay forma de recibir notificaciones que no sea por señal. e incluso entonces, no obtiene datos de usuario asociados porque eso no es compatible con osx. Sugeriría descartar aio_write de la lista. –