Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Почему программа завершает выполнение? (https://javascript.ru/forum/node-js-io-js/60030-pochemu-programma-zavershaet-vypolnenie.html)

nikotin 08.12.2015 09:57

Почему программа завершает выполнение?
 
Всем привет!
Всю голову уже себе сломал, может кто подскажет. Есть следующий код, передающий суть проблемы:

var body = "";
for(var i=0; i<=5000; i++) {
  body += "if(str==='value" + i + "') 1==1;\n";
}
body += "return str;";

var f1 = new Function("str", body);
var f2 = new Function("str", body);

console.log(f1('test1'));
console.log(f2('test2'));

// main loop
for(var i=0; i<100000; i++) {
  f1("string");
  f2("string");
  console.log(i);
}
console.log("fin!");



Мой результат работы программы:

test1
test2
1
2
3
.
.
~1971



Почему цикл main loop не отрабатывает до конца и программа завершает работу (при этом никакой информации об ошибках не выводится)? Запускать в nodejs.

Пожалуйста, не пишите комментарии относительно функциональности кода, проблема не в этом. Цель- выполнить в цикле две функции f1 и f2 100000 раз. У меня этот цикл прерывается на примерно 2000 итерации (плюс-минус). Почему прерывается - вот в чем вопрос первый вопрос и как этого избежать - второй. При этом интересная особенность- одна функция в цикле исполняется исправно 100000 раз. Я пробовал запускать этот код на разных машинах, результат примерно одинаковый.

Erolast 08.12.2015 15:12

Небось, прерывается из-за перерасхода ресурсов. Мой комп от этого кода просто завис.

Цитата:

как этого избежать
Оптимизировать, очевидно.

nikotin 08.12.2015 15:49

Цитата:

Сообщение от Erolast (Сообщение 399161)
Небось, прерывается из-за перерасхода ресурсов. Мой комп от этого кода просто завис.


Оптимизировать, очевидно.

Да, overflow of memory.

Предполагаю, что нужно как-то иначе вызывать функции, но как?
Знаний не хватает, поэтому и спрашиваю.

MallSerg 09.12.2015 02:04

Приведенный код проблемы не воспроизводит что в ноде работает что в обкладчике браузера

не указана система и версия ноды

Vlasenko Fedor 09.12.2015 04:32

var body = "", f1, f2;
for (var i = 0; i <= 5000; i++) {
    body += "if(str==='value" + i + "') 1==1;\n";
}
body += "return str;";

f1 = Function("str", body);
f2 = Function("str", body);

console.log(f1('test1'));
console.log(f2('test2'));

// main loop
for (var i = 0; i < 100000; i++) {
    f1("string");
    f2("string");
    console.log(i);
}
console.log("fin!");

этот код отрабатывает, но долго
99999
fin!

Process finished with exit code 0

nikotin 09.12.2015 11:21

Win7, памяти 4 Гб, nodejs 5.0.0

nikotin 09.12.2015 11:22

Цитата:

Сообщение от MallSerg (Сообщение 399214)
Приведенный код проблемы не воспроизводит что в ноде работает что в обкладчике браузера

не указана система и версия ноды

Win7, памяти 4 Гб, nodejs 5.0.0

nikotin 09.12.2015 11:23

Цитата:

Сообщение от Poznakomlus (Сообщение 399223)
этот код отрабатывает, но долго
99999
fin!

Process finished with exit code 0

Можно узнать характеристики вашей машины?

MallSerg 09.12.2015 12:11

32 двух разрядные версии node падают т.к. скрипт использует слишком много оперативной памяти.

Не используй циклы(1000000) в которых на каждой итерации используешь блоки кода в 5000 строк по нескольку раз.
Ну или делай разрывы в исполнении чтобы сборщик мусора имел шанс прибраться.

Vlasenko Fedor 09.12.2015 12:24

Цитата:

Сообщение от nikotin
Можно узнать характеристики вашей машины

Win10, памяти 8 Гб, nodejs 5.2.0


Часовой пояс GMT +3, время: 05:57.