【问题标题】:ENFILE: File table overflow Node.jsENFILE:文件表溢出 Node.js
【发布时间】:2016-02-28 17:34:12
【问题描述】:

我正在尝试制作一个内存效率更高的素数生成器。我想不出比使用文件作为我的素数数组并逐行同步读取更好的方法了。我运行它并且在大约 29000 它给了我ENFILE: File table overflow 错误。有什么想法可以修复/改进此代码?

This is the library I'm using

#!/usr/bin/env node

var num = 3,
    prime,
    fs = require("fs"),
    readline = require("./line_reader.js");

console.log("Hundreds: 2");
console.log("Hundreds: 3");

function appendPrime (num) {
  fs.appendFileSync("Primes.txt", num+'\n');
}

while (true) {
  prime = true;
  var times = Math.floor(Math.pow(num, 0.5));
  if (num % 2 == 0 || num % 3 == 0) {
    prime = false;
  } else {
    readline.eachLine("Primes.txt", function (line, last, cb) {
      if (num % line == 0) {
        prime = false;
        cb(true);
      } else {
        cb();
      }
    });
  }
  if (prime) {
    var place = String(num).length;
    switch (true) {
      case place <= 3:
        console.log("Hundreds: "+num);
      break;
      case place <= 5 :
        console.log("Thousands: "+num);
      break;
      case 6 :
        console.log("Hundred thousands: "+num);
      break;
      case place <= 8 :
        console.log("Millions: "+num);
      break;
      case 9 :
        console.log("Hundred millions: "+num);
      break;
      case place >= 10 :
        console.log("Billions or above: "+num);
      break;
    }
    appendPrime(num);
  }
  num += 2;
}

【问题讨论】:

  • readline.eachLine 是异步函数,因此您打开的文件太多处于循环中
  • 光盘访问速度很慢。埃拉托色尼筛法的良好实施可以更快。

标签: node.js math primes


【解决方案1】:

试试这个

sudo launchctl limit maxfiles 16384 16384 && ulimit -n 16384

【讨论】:

  • 请解释它为什么回答这个问题?
猜你喜欢
  • 2020-08-04
  • 2017-12-13
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多