Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 December 01

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Помогите понять. Пожалуйста.
Ну как бы вам на простых примерах описать...

Допустим у нас есть 2 туалета, человеки и стремящаяся к бесконечности колбаса. Так же допустим что человек максимально приближен к голбю - покушал и сразу покакал.

Так вот. Есть два туалета, 800 людей. Мы разрезали колбасу и дали покушать всем испытуемым. Они покушали и все разом пошли в 2 туалета. Один зашел, закрыл дверку, покакал, смыл, открыл дверку, вышел, другой зашел и т.д.

И другая ситуация. Брем те же два туалета и двух человек. Колбасу делим пополам, сажаем по человеку на очко и начинаем их кормить колбасой прямо не отрываясь от дела. Ясно дело, что время на поедания колбасы будет дольше, т.к. мы ее делили на 2 части а не на 800, но люди себе сидят спокойно, жуют и какают. Время на открытие дверей, смывание и прочее переключение контекста не тратится.

Ну теперь думаю проще представить что лучше :)
источник

AA

Anna Alimova 👩‍💻... in NodeUA - JavaScript and Node.js in Ukraine
Тут лучше пример с пивом, но ок )
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Ну как бы вам на простых примерах описать...

Допустим у нас есть 2 туалета, человеки и стремящаяся к бесконечности колбаса. Так же допустим что человек максимально приближен к голбю - покушал и сразу покакал.

Так вот. Есть два туалета, 800 людей. Мы разрезали колбасу и дали покушать всем испытуемым. Они покушали и все разом пошли в 2 туалета. Один зашел, закрыл дверку, покакал, смыл, открыл дверку, вышел, другой зашел и т.д.

И другая ситуация. Брем те же два туалета и двух человек. Колбасу делим пополам, сажаем по человеку на очко и начинаем их кормить колбасой прямо не отрываясь от дела. Ясно дело, что время на поедания колбасы будет дольше, т.к. мы ее делили на 2 части а не на 800, но люди себе сидят спокойно, жуют и какают. Время на открытие дверей, смывание и прочее переключение контекста не тратится.

Ну теперь думаю проще представить что лучше :)
👍
очень наглядно
а можно добавить, что это самолёт? и тогда есть ещё экипаж (служебные процессы), которым тоже нужно какать
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
👍
очень наглядно
а можно добавить, что это самолёт? и тогда есть ещё экипаж (служебные процессы), которым тоже нужно какать
Я старался максимально упростить
Но можно добавить уборщицу - гарбадж коллектора, которая заходит в туалет периодически.
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
😭

У прямоугольника будут отдельные методы для изменения длины и высоты? А у квадрата они будут менять одно и то же?
Может быть написан код, который на вход принимает rectangle, меняет ширину, но при этом ожидает, что длина не изменилась?
Это же и будет сломом родительского поведения в наследнике, потому что у родителя при смене длины ширина не меняется

С наследованием прямоугольника от четырёхугольника ещё хуже, потому что в последнем можно менять длины сторон отдельно, равно как и менять значения конкретного угла. Про изменение угла в прямоугольнике и квадрате вообще не стоит говорить, там как раз эксепшн и должен пролетать, если уж сделали наследование
если я в этих классах ничего внутри не написала противоречащего друг другу то принцип не нарушен. если там внутри только метод print() { console.log(‘Я прямоугольник’) } а у другого print() { console.log(‘Я четырехугольник’) } - ничегошеньки не нарушено, где нарушение?
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Ну как бы вам на простых примерах описать...

Допустим у нас есть 2 туалета, человеки и стремящаяся к бесконечности колбаса. Так же допустим что человек максимально приближен к голбю - покушал и сразу покакал.

Так вот. Есть два туалета, 800 людей. Мы разрезали колбасу и дали покушать всем испытуемым. Они покушали и все разом пошли в 2 туалета. Один зашел, закрыл дверку, покакал, смыл, открыл дверку, вышел, другой зашел и т.д.

И другая ситуация. Брем те же два туалета и двух человек. Колбасу делим пополам, сажаем по человеку на очко и начинаем их кормить колбасой прямо не отрываясь от дела. Ясно дело, что время на поедания колбасы будет дольше, т.к. мы ее делили на 2 части а не на 800, но люди себе сидят спокойно, жуют и какают. Время на открытие дверей, смывание и прочее переключение контекста не тратится.

Ну теперь думаю проще представить что лучше :)
Да, всё верно. Но что если по условию как раз 800 человек? логично было бы туалеты клонировать. От людей никак не избавится же.
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Да, всё верно. Но что если по условию как раз 800 человек? логично было бы туалеты клонировать. От людей никак не избавится же.
ну так клонируйте у себя ядра.
Очкоместа - это ресурс, а люди - то исполнители.
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alexander
ну так клонируйте у себя ядра.
Очкоместа - это ресурс, а люди - то исполнители.
Так вариант с форками процессов не вариант? Просто у меня всё идеально работает когда я запускаю отдельное приложение в отдельном окошке терминала. Но открыть в ручную 800 окошек… я офигею…
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alexander
ну так клонируйте у себя ядра.
Очкоместа - это ресурс, а люди - то исполнители.
А кака я могу ядро склонировать? Насколько я знаю это же на стороне харда решается. Вроде как.
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
А кака я могу ядро склонировать? Насколько я знаю это же на стороне харда решается. Вроде как.
Купить за 100500 денех в ДО себе пару нод на 64 ядра
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Купить за 100500 денех в ДО себе пару нод на 64 ядра
А как тогда держат открытыми по 3-5 млн активных сокетов?
источник

Т

Тёмыч in NodeUA - JavaScript and Node.js in Ukraine
Miseo
А как тогда держат открытыми по 3-5 млн активных сокетов?
с опаской
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
если я в этих классах ничего внутри не написала противоречащего друг другу то принцип не нарушен. если там внутри только метод print() { console.log(‘Я прямоугольник’) } а у другого print() { console.log(‘Я четырехугольник’) } - ничегошеньки не нарушено, где нарушение?
ну с методами, которые не меняют состояние объекта, пример несколько надуман - зачем нам тогда вообще иерархия? в консоль разные слова выводить? вроде можно проще

если мы говорим о какой-то приближенности задачи к реальности, то раз есть отдельные классы для квадрата, прямоугольника и четырёхугольника, то наверняка в программе используется их отличие, которое как раз и состоит в разной реакции на изменение длин сторон (и углов)

lsp он больше о том, как использовать объекты
я копировал с вики более наглядные (как мне кажется) формулировки, например Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом
с такой формулировкой разве не становится более очевидной неуместность наследования прямоугольника от четырёхугольника?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
А как тогда держат открытыми по 3-5 млн активных сокетов?
точно так же, только в этом случае я б за 100500 денех брал бы много серверов поменьше.
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alexander
точно так же, только в этом случае я б за 100500 денех брал бы много серверов поменьше.
Так а програмно как? Через воркеры или форки процесса? Я уверен что есть решение не через увеличение количества железа. 800 паралельных вычислений на одном сервере это же не фантастика.
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
ну с методами, которые не меняют состояние объекта, пример несколько надуман - зачем нам тогда вообще иерархия? в консоль разные слова выводить? вроде можно проще

если мы говорим о какой-то приближенности задачи к реальности, то раз есть отдельные классы для квадрата, прямоугольника и четырёхугольника, то наверняка в программе используется их отличие, которое как раз и состоит в разной реакции на изменение длин сторон (и углов)

lsp он больше о том, как использовать объекты
я копировал с вики более наглядные (как мне кажется) формулировки, например Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом
с такой формулировкой разве не становится более очевидной неуместность наследования прямоугольника от четырёхугольника?
ну у вас в голове про трансформации а если кто-то пишет программу которая для детей выводит на экран фигуру и ребенок должен угадать что это. никаких трансформаций. просто в массиве обьекты каждый из которых имеет метод .draw() - почему сразу строится предположение что впереди будут трансформации и чуть ли не автокад программироваться. сам факт такого наследования ничего не нарушает. нарушает LSP то КАК наследуют - ломая поведение родителя. не сломали - не нарушили. хоть Слона от Обезьяны наследуйте (хотя конечно зачем. но технически это не нарушение)
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Так а програмно как? Через воркеры или форки процесса? Я уверен что есть решение не через увеличение количества железа. 800 паралельных вычислений на одном сервере это же не фантастика.
800 параллельных вычислений и пара мульенов открытых сокетов  - разные вещи.
Чисто "программного" и чисто "железного" решения нет. Тут нужено и то и то.

Если у вас есть программа, которая может хендлить 1000 соединений самостоятельно и независимо от чего-либо другого, то запустить это программу на 1000 серверах не составит труда. И желанный мульен готов.
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
ну у вас в голове про трансформации а если кто-то пишет программу которая для детей выводит на экран фигуру и ребенок должен угадать что это. никаких трансформаций. просто в массиве обьекты каждый из которых имеет метод .draw() - почему сразу строится предположение что впереди будут трансформации и чуть ли не автокад программироваться. сам факт такого наследования ничего не нарушает. нарушает LSP то КАК наследуют - ломая поведение родителя. не сломали - не нарушили. хоть Слона от Обезьяны наследуйте (хотя конечно зачем. но технически это не нарушение)
а зачем нам выстраивать такую иерархию?
подразумевается, что каждый из наследников использует код своего непосредственного предка, каким-то образом его уточняя?
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
а если расширяя? консоль логи более подробные пишет. письма шлет. еще что-то. по названиям классов нельзя судить нарушен LSP или нет - нужно смотреть что именно сделано в наследнике. и там есть 4 способа нарушить - поменять тип принимаемых параметров, выбросить новый эксепшен, сделать более строгой валидацию
источник