Roman
пачка процессов по числу cpu и механизмы ipc
Vladimir
ок, он мешает выполнять код параллельно в рамках одного процесса
Vladimir
> @pragus пачка процессов по числу cpu и механизмы ipc да, точно так же как с event loop
Vladimir
Я и говорю - в целом те же ограничения
Roman
> @pragus пачка процессов по числу cpu и механизмы ipc да, точно так же как с event loop
event loop не означает что есть какие-то сложности с параллельностью в рамках одного процесса.
Vladimir
да, однопоточность означает
Vladimir
что golang?
Ale
там ж нет event loop
Vladimir
само собой
Roman
на линуксе там тот же самый epoll, который опрашивает fd
Vladimir
epoll != event loop
Roman
и то же самое переключение на кусок кода, который ожидает io из fd
Alex ZeroDub
NodeJs only has one main thread for user code, but Golang can have more than one threads for user code, so Strongloop in Nodejs will block any other code logic and Golang will not.
Roman
NodeJs only has one main thread for user code, but Golang can have more than one threads for user code, so Strongloop in Nodejs will block any other code logic and Golang will not.
строго говоря, можно вляпаться и заблокироваться. только надо пул тредов, на который всё это шедулится сжать до 1 потока выставив GOMAXPROCS=1
Alex ZeroDub
да но в 2017 найти машину только с 1 CPU core это подвиг )
Roman
да но в 2017 найти машину только с 1 CPU core это подвиг )
есть всякие виртуалки и вот это всё )
Alex ZeroDub
только зачем ?
Alex ZeroDub
в общем если в вашем коде мало I/O то по факту в ноде он будет весь выполняться последовательно (читай с блоками)
Ale
breaking news
Vladimir
как и в руби, питоне, etc
Alex ZeroDub
для кого-то да. уже который раз встречаю людей для которых async io == multi threads
Roman
как и в руби, питоне, etc
можно родить пачку процессов )
Ale
для кого-то да. уже который раз встречаю людей для которых async io == multi threads
io работает в других тредах, а в главном пользовательском максимально утилизируется время процессора. Все прсото
👁
Всмысле, для кого-то? для всех
вот это не понял. объяснишь?
Dmitry
Ребят, было ли у вас такое, что нужно сделать запросы к api без авторизации? Как вы это реализовали?
Ale
сокеты?
продолжи мысль пожалуйста
Dmitry
Просто думаю как лучше сделать с точки зрения и безопасности и правильности
Vladimir
вот это не понял. объяснишь?
код в питоне и рубе одновременно может выполнятся только в одном потоке
Roman
продолжи мысль пожалуйста
я правильно понял тезис, что как только мы хотим сделать read из сокета, то мы сгружаем это в пул тредов?
Vladimir
ничего не мешает. Я лишь говорю что это примерно то же самое, как однопоточность + event loop
Roman
ничего не мешает. Я лишь говорю что это примерно то же самое, как однопоточность + event loop
строго говоря, для всяких сетевых серверов как раз лучше модель "по процессу-мультиплексору по числу cpu"
Mike
что мешает запустить несколько процессов?
тогда появляется проблема синхронизации потоков.
Mike
процессов
Roman
а в чем проблема?
Mike
предположим у тебя массив n ^ 100, в каждом элементе хранится число, надо перебрать и отсортировать все числа по возрастанию, твои действия в разрезе "запустил много процессов"?
Roman
например, у меня есть сервис который умеет по команде передать всех обслуживаемых клиентов другому процессу.
Roman
клиенты этого даже не заметят
Roman
никаких реконнектов и прочего.
Vladimir
> @pragus и строго говоря это тоже неверно. вот с этим не согласен. Это как раз верно именно строго
Mike
так, вот тут подробнее ) ты положил весь массив в память, и запустил некое количество процессов, как их синкать используя общую память?
Vladimir
сишные расширения отпускают gil.
да, но речь исключительно о нативном коде
Roman
так, вот тут подробнее ) ты положил весь массив в память, и запустил некое количество процессов, как их синкать используя общую память?
а в чем проблема? бьём массив на чанки, каждому процессу свой чанк. + кусочек памяти для общей инормации по задачам и какой-нибудь набор fd для синхронизации.
Mike
мне все равно не понятен этап синхронизации (
Roman
мне все равно не понятен этап синхронизации (
а зачем тут синхронизация вообще? :)
Mike
когда все чанки отсортированны, нужно получить тот же массив в итоге
Алдар
я б квиксортом сортировал
Ale
для параллельности лучше мерж сорт, но в конце все равно надо одним потоком все объединить в один большой массив
Mike
вот, должен быть какой-то триггер, что все n процессов закончили работу, чтобы начать объединение
Алдар
когда квиксорт разделяет массив компаратором на два, каждый подмассив отдать другому потоку
Roman
когда все чанки отсортированны, нужно получить тот же массив в итоге
http://stackoverflow.com/questions/23531625/multithreaded-sorting-application/23532317#23532317
Roman
вот вариант с тредами. но с процессами там разница будет минимальна.
Roman
вот, должен быть какой-то триггер, что все n процессов закончили работу, чтобы начать объединение
вариантов много. начиная от кусочка памяти, куда каждый по завершению запишет и заканчивая просто каталогом в который каждый воркер что-то напишет.
Roman
вариантов посигналить - миллион
Mike
забыл зачем вообще начал раздувать за мультитред (:
Roman
да можно по аналогии с гошным WaitGroup сделать https://golang.org/pkg/sync/#WaitGroup
именно. если ограничиться только linux, то можно взять eventfd и через него сигналить )
Roman
а так, стоит просто посмотреть как в postgres сделано взаимодействие между процессами. там нет тредов и всё ок.
Alex ZeroDub
ох постгрес. эталон лучшей СУБД
Roman
ох постгрес. эталон лучшей СУБД
вроде как речь была не про эталон, а внутренности.
Alex ZeroDub
кручу эту СУБД уже 9 год
pyoner
Alex ZeroDub
руби уже не входит в 10ку востребованных языков. так что RIP
Dmitry
Anonymous
есть ли в nodejs что-то такое же крутое, как интерактор в руби? (https://github.com/collectiveidea/interactor) кто где логику хранит и как вызываете?