Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

Потоки в Node - текущее состояние и прогнозы

12.12.2016, 01:56. Показов 2142. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Гуру, кто в теме? (я новичок - пришел из php(каждый запуск *.php=поток) и java-android(есть полноценные потоки И колбэки))

Везде натыкаюсь на то что потоков нет в ноде... а что в планах? будут? через пол-года-год? или не будет "принципиально"???

нашел это https://www.npmjs.com/package/threads
...не понял...
знаю про маштабирование через кластеры - https://nodejs.org/docs/latest/api/cluster.html
не понял как удерживать "связь между потоками".

Задача: слабый/занятый 2х ядерный комп принимает через веб задачи. Некоторые (большинство) быстрые - уровня - "для вас нет новых сообщений"(или отдать статическую картинку), а некоторые могут подвесить проц минут на 20 (заливка длинных файлов, зипование/распаковка, парсинг сложхных файлов, долгие запросы в базу - до 2-10х минут каждый)... авторизация общая (если кластеры), кое-что проще держать в простых array прямо в js, а не подгружать каждый раз из базы или памяти(мем-кеш-баз)... Отдельный "цикл" удерживает сокеты и должен получать уведомления о завершении длинных операций и отправки пользователям...

Короче... Сейчас проект на стадии проектирования - серьезно займусь весной (сейчас другой проект). Надо подготовить/изучить "инструменты" и технологии... Что посоветуете? изучать нюансы кластеров (многие на него в инете плюются - даже на Хабре) или ожидать скорое появление потоков? Сильно боюсь что мои обработки будут "блокирующими" и завесят сервер на этапе обработки... хотелось бы разделить сервер на "задачи", разложить их в потоки, каждому назначить "приоритет" и менять приоритет динамически перебрасывая задачи и пользуясь общим набором переменных... а так-же убивать потоки/задачи если они вышли за таймаут (архивация не должна длиться больше 10 минут = слишком много данных - проблема клиента - пусть шлет меньше -> убиваем поток и шлем "ругательство")
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2016, 01:56
Ответы с готовыми решениями:

текущее состояние сокета
здравствуйте! никто не подскажет как можно проверить текущее состояние сокета, точнее даже будет так: предположим работает сервер и...

TTimer текущее состояние
Добрый день, Возникла такая проблемка, запускаю таймер и нужно по нажатию узнать сколько он натикал в данный момент, но у него никаких...

Текущее состояние дел
Итак. Дело с новой партией худо бедно пошло. Поставщики комплектухи почти вышли из новогоднего коматоза, монтажники загружены и первые...

7
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
12.12.2016, 12:47
Лучший ответ Сообщение было отмечено Tester64 как решение

Решение

Tester64, я создавал потоки. Всё четко.

Добавлено через 1 минуту
Ты не мог натыкаться на то, что в ноде нет потоков.
Мог только на то, что нода однопоточная.

Добавлено через 6 минут
Давно разбирался и так в бою не использовал, поэтому не уверен что оно, но вроде:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
var Worker = require('webworker-threads').Worker;
 
var fibo = new Worker(function() {
    console.log(3);
    while(true) {
        postMessage(123);
        n = 1 + 2;
    }
});
fibo.onmessage = function (event) {
    console.log('fib(40) = ' + event.data);
};
Только именно этот код у меня щас сильно затормозил комп. Будь готов)

И вообще-то, запросы в базу данных никак не блокируют node
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
12.12.2016, 21:34  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
запросы в базу данных никак не блокируют node
мне предстоит работать с архиваторами и парсерами текста... не знаю как поведет себя - половину самому писать прийдется...
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
12.12.2016, 21:39
Tester64, я не понимаю причем тут бд.
Делается запрос в бд и callback вернется тогда, когда бд завершит операцию и вернет ответ.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
12.12.2016, 23:21  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
я не понимаю причем тут бд.
База не причем! она лишь для "логов". Основа - архиваторы! Запаковать 5 мегабайт тестовых файлов, и отправить под паролем... Одна операция на php занимала до 20 секунд. "Ломанулись" 5ро - всех "разделили" на потоки - каждый теперь думает 100 секунд - таймаут у каждого через 60... А в это-же время еще 100 простых запросов - "новости есть? нет!". Хочу "очереди" как в ноде, управлять нагрузкой - не больше 2х одновременно паковать на 2х ядрах, но и не занавешивать сервер пока один архивируется (не знаю как ассинхронность в архивах и в парсерах сработает). База - почти не причем!
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
12.12.2016, 23:43
Цитата Сообщение от Tester64 Посмотреть сообщение
а некоторые могут подвесить проц минут на 20 (заливка длинных файлов, зипование/распаковка, парсинг сложхных файлов, долгие запросы в базу - до 2-10х минут каждый)
Я то понимаю что не причем, но по вашим словам это не скажешь)
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
13.12.2016, 00:14  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
Я то понимаю что не причем, но по вашим словам это не скажешь)
На php работа с базой занимала доли секунд. Проверка авторизации и запись логов после успешной обработки (и до нее на случай не успешной) - это чтение/запись одной короткой строки из таблицы (было бы разумнее прочитать юзеров в таблицу памяти и больше не читать - простой аррэй, а не мэмкэш-сервера - 1000 записей это уже круто - но удерживать такую таблицу для каждого потока/ноде-сесии не разумно). Проблема именно в работе с 7zip и zip (в обе стороны с хорошим уровнем сжатия)... как бы не вешало сервер окончательно мешая мелким клиентам узнавать про наличие новостей для них...
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
13.12.2016, 00:25
Tester64, я понимаю как работает php.
Высказал про бд, потому что она не входит в список вещей, которые блокируют ноду на время выполнения задачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2016, 00:25
Помогаю со студенческими работами здесь

MediaElement. Не определяет текущее состояние
Здравствуйте. Делаю плеер. Есть кнопка при нажатии на которую плеер будет либо останавливаться, если он запущен, либо наоборот. Пишу...

Проверить текущее состояние клавиши
Собственно делаю прогу и надо проверить состояние клавиши NumLock без использования обработчиков,тоесть в реальном времени,т.е активирована...

Определить текущее состояние дескриптора
По имеющемуся дескриптору объекта можно определить его текущее состояние. Это делается с помощью т.н. ожидающих функций. Чаще всего...

Стоит запрет записи на флеш
такая же проблема, что может быть не пойму, уважаемые может кто знает как решить эту проблему? на скрине есть один интересный факт:...

Как узнать текущее состояние процесса
Здравствуйте уважаемые эксперты. Собственно вопрос стоит в названии темы, как можно узнать текущее состояние процесса, т.е. находится он в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru