(C++) запускается в командной строке, парсит файл в 120 мб и за 2-3 секунды отдаёт ответ. Эта же утилита, запускаемая в пустом проекте Node через child_process.spawn(), отрабатывает примерно за 5 — 5.5 секунд. В коде приложения, где это надо запускать после ряда операций и получения данных от сторонних библиотек / по EventEmitter, это отрабатывает за 10—12 секунд.
Можно ли сделать быстрее в 2-3 раза (чтобы было 3-5 секунд)? Могут ли тут помочь worker_threads?
На что стоит обратить внимание при решении задачи?
Виртуалка, Debian, память 2 ГБ, на процессоре 1 ядро
всегда лл языки будут быстрее
Что такое лл языки?
лоу левел
Для зто задачи можно читать и парсить части файла паралельно?
а чисто для проверки, какова скорость выполнения утилиты при синхронном запуске? ну типа через child_process.exec() ?
Не понял вопроса. Если речь про асинхронность, — нет, там надо успеть это сделать за время, пока по EventEmitter не пришли новые данные. Когда они придут — надо искать с нуля новый id в файле. Данные приходят как раз примерно раз в 3 секунды
а код утилиты есть? редактироваться может?
Нет, она — готовое решение. Надо использовать ее
И имею ввиду можно параллельно этот файл с разных концов парсить? 30 мб в одном потоке, 30 мб в другом и т. п.? Или обязательно последовательно от начала до конца?
тогда изучать, откуда такой оверхед на запуск процесса
Наверное, не обязательно, самое главное — найти там нужный id пока не придет новая информация по евент емиттеру
А что 2-3 секунды это долго? я просто не знаю, что долго, а что нет
да, не должно быть так
Ну надо ещё сказать, что эта утилита (C++) работает с .pbf файлом и выводит либо несколько строк XML, либо просто текст, может там на преобразование как раз время уходит, я не знаю, но если .pbf преобразовать в .xml целиком (тоже с помощью этой же утилиты), то файл начинает весить не 120 МБ, а 1.84 GB, там, судя по всему, очень большая куча строк
А как это сделать? Это worker_threads? Мне пулл воркеров надо?
Хз. Я изначально не понял твою проблему, у тебя там вроде swapn проблемный, а не процессинг
ну у меня и то, и другое проблемное на самом деле)
Не должно быть большой разницы при одинаковых вызовах напрямую и через ноду. Разве что какие-нибудь проблемы в io, но если там несколько строк всего, то.. Нужно исследовать. У меня нет идей, почему так может быть
Обсуждают сегодня