Estoy buscando hacer una descarga de transmisión rápida -> cargar para mover archivos grandes a través de HTTP de un servidor a otro.
Durante esto, me di cuenta de que httplib, que es utilizado por urllib3 y, por lo tanto, también solicita, parece codificar cuánto obtiene de una secuencia a la vez a 8192 bytes.
¿Por qué es esto? ¿Cuál es el beneficio de 8192 sobre otros tamaños?
Por lo que encontré, el tamaño del bloque debe ser el tamaño de la página de los recursos, pero dado que el tamaño de la página solo está disponible en UNIX, esto se codificó en 8192 para que todos los demás sistemas, especialmente Windows, no se bloqueen en esto. De lo contrario, no hay otra razón para codificarlo.
servidor web Nginx
Esto es de nginx
Syntax: client_body_buffer_size size; Default: client_body_buffer_size 8k|16k;
Establece el tamaño del búfer para leer el cuerpo de la solicitud del cliente. En caso de que el cuerpo de la solicitud sea más grande que el búfer, todo el cuerpo o solo una parte se escribe en un archivo temporal. De forma predeterminada, el tamaño del búfer es igual a dos páginas de memoria. Esto es 8K en x86, otras plataformas de 32 bits y x86-64. Suele ser 16K en otras plataformas de 64 bits
Servidor Web Apache
ProxyIOBufferSize Directive Description: Determine size of internal data throughput buffer Syntax: ProxyIOBufferSize bytes Default: ProxyIOBufferSize 8192 Context: server config, virtual host Status: Extension Module: mod_proxy
Por lo tanto, Apache también usa 8192
de forma predeterminada como el tamaño del búfer del proxy.
cliente apache
La documentación del cliente Apache Java indica
https://hc.apache.org/httpcomponents-client-4.2.x/tutorial/html/connmgmt.html
8192
bytes.Cliente Rubí
En ruby el valor se establece por defecto 16K
https://github.com/ruby/ruby/blob/814daf855e0aa2c3a1164dc765378d3a092a1825/lib/net/protocol.rb#L172
Entonces hay debajo del hilo
¿Cuál es un buen tamaño de búfer para la programación de sockets?
¿Cuál es el mejor tamaño de búfer de memoria para asignar para descargar un archivo de Internet?
¿Tamaño óptimo de lectura del búfer de archivo?
Si observa muchos de estos, el consenso se encuentra en 8K/16K como tamaño de búfer. Y no es que deba fijarse en eso sino que configurable y 8k/16K debería ser lo suficientemente bueno para la mayoría de las situaciones. Así que no veo ningún problema con Python que también use esos 8K de forma predeterminada. Pero sí, debería haber sido configurable.
Python 3.7
lo tendrá configurable como tal, pero eso puede no ayudar a su causa si no puede actualizarlo.