Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

263
Views
node.js - ¿Cómo ajustar el tamaño del búfer de salida estándar (también conocido como highWaterMark) de child_process.spawn ()?

Estoy intentando ajustar el tamaño del búfer ( stdout ) para la salida estándar de una llamada child_process.spawn(), y tengo dificultades para hacerlo con éxito. A continuación hay un código que ilustra lo que estoy buscando. Estoy tratando de realizar algunas evaluaciones comparativas con varios tamaños de búfer estándar, pero hasta que no pueda ajustar el tamaño del búfer, no podré hacerlo. ¡Cualquier consejo sería apreciado, gracias!

 // I'm using the `stdout` from a child_process.spawn() call to feed into another stream, and I'm having a hard time increasing the buffer size on stdout. // The code below illustrates the issue: const child_process = require('child_process'); const stream = require('stream'); const fs = require('fs'); const compressStream = child_process.spawn("cat", ["testfile_32MB"], {writableHighWaterMark: 1024*1024, highWaterMark: 1024*1024}); // <-- child_process.spawn does not have highWaterMark or writableHighWaterMark options, so including them has no effect, but I'm including it just as an illustration of what I want. compressStream.stdout.writableLength = 1024*1024; // <-- This does not help. compressStream.stdout._writableState.writableLength = 1024*1024; // <-- This does not help. compressStream.stdout._writableState.writableHighWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout.writableHighWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout._readableState.highWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout._writableState.highWaterMark = 1024*1024; // <-- This does not help. compressStream.stdout.on("data", (data) => { console.log("data length [from spawn()]:", data.length); // <-- data.length will always be <= 64KB! How can we get it higher? }); const readStream = fs.createReadStream("testfile_32MB", {highWaterMark: 1024*1024}); readStream.on("data", (data) => { console.log("data length [from createReadStream()]:", data.length); // <-- This prints values <= 1MB, which is what I wish I had for child_process.spawn/stdout... });

Tenga en cuenta que necesitará un archivo llamado "testfile_32MB" para ejecutar este código de ejemplo, y debe tener al menos unos pocos megabytes de tamaño.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Por desgracia, no puedes hacer esto. highWaterMark es un mecanismo que se utiliza para señalar al escritor que se detenga porque el lector no está leyendo y su búfer está lleno.

Un Socket le enviará los datos tan pronto como estén disponibles. Siempre utilizará un búfer interno de 64k codificado de forma rígida. El aumento de highWaterMark lo hará capaz de contener más datos, pero aún le enviará fragmentos de 64 Kb, excepto que obtendrá ráfagas de varias llamadas por rotación de bucle de evento.

No tiene acceso a las opciones de creación de Stream cuando usa spawn ; eventualmente puede pasar un flujo de canalización con nombre preconstruido, pero esto no resolverá su problema.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!