Если я правильно читаю этот код то при обращении к URL json/ никакие драйвера и конекшны делатся не будут, а просто вернется простой json.stenking wrote:Потому что загрузка тяжёлых драйверов, подключение к базе и операции с файловой системой это действия сильно медленее простого перебора строчки.crypto5 wrote: Почему?
Re: Интересное мнение про перспективы .NET
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Интересное мнение про перспективы .NET
Я думаю классические джава сервера и с блокированными тредами неплохо живут, все эти дела нужны очень маленькой части програм.Интеррапт wrote:Я даже ради интереса погуглил NIO и ForkJoinTask - глухо как в могиле, ничего даже близко подобного нет, а ведь казалось бы - это ведь должен быть прорыв в серверном перформансе.
In vino Veritas!
-
- Уже с Приветом
- Posts: 3836
- Joined: 13 Sep 2007 10:06
Re: Re: Интересное мнение про перспективы .NET
Так мы теоретический перформанс сравниваем или на приложениях, которые существуют в реальности?stenking wrote:Потому что загрузка тяжёлых драйверов, подключение к базе и операции с файловой системой это действия сильно медленее простого перебора строчки.crypto5 wrote: Почему?
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
Стенкин критикует конкретный бенчмарк на данный момент.avitya wrote:Так мы теоретический перформанс сравниваем или на приложениях, которые существуют в реальности?stenking wrote:Потому что загрузка тяжёлых драйверов, подключение к базе и операции с файловой системой это действия сильно медленее простого перебора строчки.crypto5 wrote: Почему?
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
Ну точнее можно, но вся распаралеливаемость потеряется.crypto5 wrote:Так думаю закомпоновать нельзя, кривой дизайн изначально, должен быть список тасков с интами а не таска с списком интов.rorp wrote:В этом случае жаба выглядит довольно элегантно.crypto5 wrote:Ну я вверху привел приблизительный код, вам точный привести? Думаю как то так:rorp wrote:А как сложить два инта из двух разных тасок и завернуть результат в третью?crypto5 wrote: Это обычный pool будет пухнуть, а фишка fork join-a что он будет работать так как я описал. Там правда нужно вместо Future получать ForkJoinTask из forkJoinPool.
ForkJoinTask task = forkJoinPool.submit(() -> f1.get() + f2.get());
А что, если есть таска, которая выдает список интов и есть функция, которая берет инт и возвращает таску, в которой что-то с этим интом деалается (напиример, он возводтся в квадрат). Как при помощи этой функции сделать из таски списка интов таску списка квадратов?
In vino Veritas!
-
- Уже с Приветом
- Posts: 314
- Joined: 24 May 2013 22:04
Re: Re: Интересное мнение про перспективы .NET
Ну почему сразу кривой дизайн? Представьте, что инты мы достаём из БД, и мы не хотим делать по запросу на каждый инт, а сразу все нужные нам инты достать пачкой. А функция не от хорошей жизни таску возвращает, а потому что делает RPC к сервису, написанному нашими братьями с солнечного субконтинента. Так прямее?crypto5 wrote:Так думаю закомпоновать нельзя, кривой дизайн изначально, должен быть список тасков с интами а не таска с списком интов.rorp wrote:В этом случае жаба выглядит довольно элегантно.crypto5 wrote:Ну я вверху привел приблизительный код, вам точный привести? Думаю как то так:rorp wrote:А как сложить два инта из двух разных тасок и завернуть результат в третью?crypto5 wrote: Это обычный pool будет пухнуть, а фишка fork join-a что он будет работать так как я описал. Там правда нужно вместо Future получать ForkJoinTask из forkJoinPool.
ForkJoinTask task = forkJoinPool.submit(() -> f1.get() + f2.get());
А что, если есть таска, которая выдает список интов и есть функция, которая берет инт и возвращает таску, в которой что-то с этим интом деалается (напиример, он возводтся в квадрат). Как при помощи этой функции сделать из таски списка интов таску списка квадратов?
И у меня это прекрасно компонуется:
Code: Select all
def compose(futureInts: Future[List[Int]], f: Int => Future[Long]): Future[List[Long]] = {
for {
ints <- futureInts
longs <- Future.sequence(ints.map(f))
} yield longs
// или futureInts.flatMap(ints => Future.sequence(ints.map(f)))
}
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Re: Интересное мнение про перспективы .NET
Ну конечно. Во-первых как только exec() закончится (а ведь он не будет ждать выполнения асинхронной операции), то тут-же ожидающий его get() разблокируется, а к этому времени ответ от асинхронного read() еще может не прийти, поэтому данных у нас не будет. У exec (который boolean, а не void) есть возможность указать "return false", чтобы просигнализировать, что мы еще ждем данные от какой-то асинхронной операции, тогда ожидающий get будет ждать, вызова complete(), но все это время там просто поток будет тупо сидеть в join().crypto5 wrote:Идея вроде простая: делаем новую
class ReadFromNetworkForkJoinTask extends ForkJoinTask {
@override void exec() {
выzываем NIO с колбек, который вызовет this.complete(value);
}
}
Все.
Нет, смысла запихивать асинхронное чтение в ForkJoinTask вообще не вижу.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
Такое на джава 8 тоже легко запрограмировать, но как я уже написал, это плохо распаралеливается дальше: у вас все колапсируется в одну future которая будет выполнятся в одном потоке, но в вашем примере с БД видимо по другому не выйдет.rorp wrote:Ну почему сразу кривой дизайн? Представьте, что инты мы достаём из БД, и мы не хотим делать по запросу на каждый инт, а сразу все нужные нам инты достать пачкой. А функция не от хорошей жизни таску возвращает, а потому что делает RPC к сервису, написанному нашими братьями с солнечного субконтинента. Так прямее?crypto5 wrote:Так думаю закомпоновать нельзя, кривой дизайн изначально, должен быть список тасков с интами а не таска с списком интов.rorp wrote:В этом случае жаба выглядит довольно элегантно.crypto5 wrote:Ну я вверху привел приблизительный код, вам точный привести? Думаю как то так:rorp wrote: А как сложить два инта из двух разных тасок и завернуть результат в третью?
ForkJoinTask task = forkJoinPool.submit(() -> f1.get() + f2.get());
А что, если есть таска, которая выдает список интов и есть функция, которая берет инт и возвращает таску, в которой что-то с этим интом деалается (напиример, он возводтся в квадрат). Как при помощи этой функции сделать из таски списка интов таску списка квадратов?
И у меня это прекрасно компонуется:И никаких if'ов и try/catch'ей, несмотря на то, что в этом коде делатся куча проверок и отлов исключений.Code: Select all
def compose(futureInts: Future[List[Int]], f: Int => Future[Long]): Future[List[Long]] = { for { ints <- futureInts longs <- Future.sequence(ints.map(f)) } yield longs // или futureInts.flatMap(ints => Future.sequence(ints.map(f))) }
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
Здесь я думаю у тебя ошибка в утверждении, когда вызовется join(), ForkJoinPool увидит что ReadFromNetTask еще не релизнута, и не будет блокировать поток, а отдаст потоку какую то другую таску из очереди выполнения.Интеррапт wrote:вызова complete(), но все это время там просто поток будет тупо сидеть в join().
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Re: Интересное мнение про перспективы .NET
Я не вижу в этом ни малейшего performance gain по сравнению с, например AsynchronousSocketChannel (и его производных), который просто возвращает Future на read.crypto5 wrote:Здесь я думаю у тебя ошибка в утверждении, когда вызовется join(), ForkJoinPool увидит что ReadFromNetTask еще не релизнута, и не будет блокировать поток, а отдаст потоку какую то другую таску из очереди выполнения.Интеррапт wrote:вызова complete(), но все это время там просто поток будет тупо сидеть в join().
-
- Уже с Приветом
- Posts: 14407
- Joined: 26 May 2006 02:39
Re: Re: Интересное мнение про перспективы .NET
Хм..а мне кажется что там по дефолту еager loading а не lazy. Вроде как раз в этом и отличие от традиционных фраимворков что все классы загрузились как C разрешение и потом используются нашару. Хотя я могу ошибатся.crypto5 wrote:Если я правильно читаю этот код то при обращении к URL json/ никакие драйвера и конекшны делатся не будут, а просто вернется простой json.stenking wrote:Потому что загрузка тяжёлых драйверов, подключение к базе и операции с файловой системой это действия сильно медленее простого перебора строчки.crypto5 wrote: Почему?
Last edited by stenking on 11 Feb 2014 07:56, edited 1 time in total.
Бога нет.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
Разница в том что "Future на read" будет блокировать лишний поток пока рид не завершился, а в ForkJoin pool-e поток блокироваться не будет, а будет выполнять другую полезную работу.Интеррапт wrote:Я не вижу в этом ни малейшего performance gain по сравнению с, например AsynchronousSocketChannel (и его производных), который просто возвращает Future на read.crypto5 wrote:Здесь я думаю у тебя ошибка в утверждении, когда вызовется join(), ForkJoinPool увидит что ReadFromNetTask еще не релизнута, и не будет блокировать поток, а отдаст потоку какую то другую таску из очереди выполнения.Интеррапт wrote:вызова complete(), но все это время там просто поток будет тупо сидеть в join().
In vino Veritas!
-
- Уже с Приветом
- Posts: 314
- Joined: 24 May 2013 22:04
Re: Интересное мнение про перспективы .NET
Сервера может и неплохо живут -- они железные. А вот писателям их не позавидуешь.crypto5 wrote:Я думаю классические джава сервера и с блокированными тредами неплохо живут, все эти дела нужны очень маленькой части програм.Интеррапт wrote:Я даже ради интереса погуглил NIO и ForkJoinTask - глухо как в могиле, ничего даже близко подобного нет, а ведь казалось бы - это ведь должен быть прорыв в серверном перформансе.
-
- Уже с Приветом
- Posts: 314
- Joined: 24 May 2013 22:04
Re: Re: Интересное мнение про перспективы .NET
А как? В жаба 8 у Future нет ни map'а, ни flatMap'а.crypto5 wrote:Такое на джава 8 тоже легко запрограмировать
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Интересное мнение про перспективы .NET
Не знаю, я вот кучу кода видел, который обрабатывает десятки тысяч QPS, и сотни миллионов транзакций в день, и вполне все бегает по старинке без изнишних сложностей.rorp wrote:Сервера может и неплохо живут -- они железные. А вот писателям их не позавидуешь.crypto5 wrote:Я думаю классические джава сервера и с блокированными тредами неплохо живут, все эти дела нужны очень маленькой части програм.Интеррапт wrote:Я даже ради интереса погуглил NIO и ForkJoinTask - глухо как в могиле, ничего даже близко подобного нет, а ведь казалось бы - это ведь должен быть прорыв в серверном перформансе.
Хотя не исключаю что в геймдеве, аналитике, и телекоме такое нужно.
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
У колекций естьrorp wrote:А как? В жаба 8 у Future нет ни map'а, ни flatMap'а.crypto5 wrote:Такое на джава 8 тоже легко запрограмировать
In vino Veritas!
-
- Уже с Приветом
- Posts: 314
- Joined: 24 May 2013 22:04
Re: Re: Интересное мнение про перспективы .NET
И как это поможет для композиции фьючерсов?crypto5 wrote:У колекций естьrorp wrote:А как? В жаба 8 у Future нет ни map'а, ни flatMap'а.crypto5 wrote:Такое на джава 8 тоже легко запрограмировать
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
Ну я в примере с сложением сделал пример композиции, легко представить как это сделать в каком нибудь "reduce".rorp wrote:И как это поможет для композиции фьючерсов?crypto5 wrote:У колекций естьrorp wrote:А как? В жаба 8 у Future нет ни map'а, ни flatMap'а.crypto5 wrote:Такое на джава 8 тоже легко запрограмировать
In vino Veritas!
-
- Уже с Приветом
- Posts: 64661
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Re: Интересное мнение про перспективы .NET
у скала-лазов overengineering rules.
-
- Уже с Приветом
- Posts: 314
- Joined: 24 May 2013 22:04
Re: Интересное мнение про перспективы .NET
Какие еще сложности? Теория категорий? Монада Future (не путать с java.util.concurrent.Future) специально придумана, чтоб программисты не сношали себе мозг мульти-тредингом, а просто писАли бизнес-логику. На Finagle гляньте при случае.crypto5 wrote:Не знаю, я вот кучу кода видел, который обрабатывает десятки тысяч QPS, и сотни миллионов транзакций в день, и вполне все бегает по старинке без изнишних сложностей.rorp wrote:Сервера может и неплохо живут -- они железные. А вот писателям их не позавидуешь.crypto5 wrote:Я думаю классические джава сервера и с блокированными тредами неплохо живут, все эти дела нужны очень маленькой части програм.Интеррапт wrote:Я даже ради интереса погуглил NIO и ForkJoinTask - глухо как в могиле, ничего даже близко подобного нет, а ведь казалось бы - это ведь должен быть прорыв в серверном перформансе.
-
- Уже с Приветом
- Posts: 314
- Joined: 24 May 2013 22:04
Re: Re: Интересное мнение про перспективы .NET
К сожалению, я не настолько умный, чтоб легко представить...crypto5 wrote:Ну я в примере с сложением сделал пример композиции, легко представить как это сделать в каком нибудь "reduce".rorp wrote:И как это поможет для композиции фьючерсов?crypto5 wrote:У колекций естьrorp wrote:А как? В жаба 8 у Future нет ни map'а, ни flatMap'а.crypto5 wrote:Такое на джава 8 тоже легко запрограмировать
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Re: Интересное мнение про перспективы .NET
Я это заметил еще когда вы меня попросили сложение реализоватьrorp wrote:К сожалению, я не настолько умный, чтоб легко представить...crypto5 wrote:Ну я в примере с сложением сделал пример композиции, легко представить как это сделать в каком нибудь "reduce".rorp wrote:И как это поможет для композиции фьючерсов?crypto5 wrote:У колекций естьrorp wrote: А как? В жаба 8 у Future нет ни map'а, ни flatMap'а.
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Интересное мнение про перспективы .NET
Ну для меня есть сложности, монады сложно дебажить, сложнее отлавливать ошибки, они норовят выполнить запрос к БД когда транзакция закрылась, потому что какой то умник заюзал lazy колекцию, а по возвращаемому результату это никак не поймешь.rorp wrote:Какие еще сложности? Теория категорий? Монада Future (не путать с java.util.concurrent.Future) специально придумана, чтоб программисты не сношали себе мозг мульти-тредингом, а просто писАли бизнес-логику. На Finagle гляньте при случае.crypto5 wrote:Не знаю, я вот кучу кода видел, который обрабатывает десятки тысяч QPS, и сотни миллионов транзакций в день, и вполне все бегает по старинке без изнишних сложностей.rorp wrote:Сервера может и неплохо живут -- они железные. А вот писателям их не позавидуешь.crypto5 wrote:Я думаю классические джава сервера и с блокированными тредами неплохо живут, все эти дела нужны очень маленькой части програм.Интеррапт wrote:Я даже ради интереса погуглил NIO и ForkJoinTask - глухо как в могиле, ничего даже близко подобного нет, а ведь казалось бы - это ведь должен быть прорыв в серверном перформансе.
In vino Veritas!
-
- Уже с Приветом
- Posts: 256
- Joined: 14 Jul 2011 09:07
- Location: SaintP -> NYC
Re: Интересное мнение про перспективы .NET
Это не монады вина а токо криворукого создания которые норовить выполнить IO черт знает какcrypto5 wrote: Ну для меня есть сложности, монады сложно дебажить, сложнее отлавливать ошибки, они норовят выполнить запрос к БД когда транзакция закрылась, потому что какой то умник заюзал lazy колекцию, а по возвращаемому результату это никак не поймешь.
-
- Уже с Приветом
- Posts: 256
- Joined: 14 Jul 2011 09:07
- Location: SaintP -> NYC
Re: Re: Интересное мнение про перспективы .NET
По моему как раз таки overengineering у жавалазов, чтобы сделать в общем то простую композицию двух фьючуров нужно писать какие то свои таски и в пул их пихать. А в скале это просто работает. И так с очень многим. Удобные и просты конструкции пишутся в 10 раз короче.Komissar wrote:у скала-лазов overengineering rules.
А пример самого ужасного в мире overengineering я видел как раз таки на джаве. Когда был изобретен свой фреймворк для distributed-computations и в котором никто ничего не опнимал кроме автора. Но автор был VP Citibank по этому все ели кактус. Точно такойже фреймфорк, хотя по сути он был идиотский но написанный на скале был бы раз в 10 меньше в объеме кода и тогда возможно был бы еще шанс его понять.