Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

235
Visualizações
¿Es mmap + madvise realmente una forma de E/S asíncrona?

Estoy tratando de averiguar si mmap 'ing un archivo, y luego usar madvise() o posix_madvise() con MADV_WILLNEED / POSIX_MADV_WILLNEED en realidad activa E / S asíncrona de fondo para lectura anticipada. Las páginas del manual de madvise no especifican si este es el caso; el comportamiento real de madvise no queda claro en su mayoría, para permitir la flexibilidad de la implementación.

Pero, ¿alguna implementación de POSIX convencional real (como Linux) realmente realiza E/S de archivos asíncronos cuando se llama a madvise() con MADV_WILLNEED ? Parece que no puedo obtener ninguna información confiable sobre esto. Esta pregunta sugiere que sí, al menos en Linux, incluso si no es ideal ya que no hay un mecanismo de devolución de llamada.

Este extracto del libro afirma que posix_fadvise con POSIX_FADV_WILLNEED hará lectura anticipada asíncrona, pero no menciona si madvise() hace lectura anticipada asíncrona.

Además, parecería que todo el concepto de E/S de "lectura anticipada" realmente no tiene ningún sentido a menos que sea asíncrono. Si fue síncrono, simplemente hace que la aplicación del usuario se bloquee para la lectura anticipada, en lugar de más tarde cuando lee el archivo, lo que no parece una optimización particularmente poderosa.

Entonces, ¿ madvise() con MADV_WILLNEED realmente hace lectura anticipada asíncrona en cualquier plataforma principal (como Linux)?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Con Linux siempre puedes consultar el código fuente.

Ver fadvise.c :

 case POSIX_FADV_WILLNEED: ... force_page_cache_readahead(mapping, f.file, start_index, nrpages); break;

Entonces, posix_fadvise llama a force_page_cache_readahead para realizar la lectura anticipada.

Ahora echemos un vistazo a madvise.c :

 static long madvise_willneed(...) { ... force_page_cache_readahead(file->f_mapping, file, start, end-start); return 0; }

Entonces MADV_WILLNEED y POSIX_FADV_WILLNEED son equivalentes en Linux.

¿Puede esto llamarse E/S asíncrona? No me parece. Async IO generalmente implica que hay alguna notificación que le permite recuperar datos. El consejo es solo un consejo: no solo no sabe cuándo los datos están listos para ser leídos, sino que si es demasiado tarde, es posible que los datos ya se desechen.

over 4 years ago · Santiago Trujillo Relatório

0

En general, debe suponer que las funciones m* no realizarán una lectura anticipada asíncrona.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda