Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #91 (permalink)  
Старый 01.04.2015, 06:31
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от MetaDriver Посмотреть сообщение
Интересно.
Простой вопрос: в Collection все ядра работают на многоядерниках, или потоки виртуальные, в рамках одного потока базового движка?
Виртуальные потоки - это в принципе удобный (при разработке) синтаксический сахар, но физического прироста производительности не дают.
Потоки виртуальные, но с другой стороны, их можно запускать внутри воркера или дочернего процесса ноды и тогда они будут исполнятся на разных ядрах (если они есть конечно ).

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

У меня есть небольшая статейка: https://github.com/kobezzza/Collecti...%B2-Collection
__________________
kobezzza
code monkey
Ответить с цитированием
  #92 (permalink)  
Старый 26.04.2015, 20:41
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от kobezzza Посмотреть сообщение
...опять приведу пример Java (знаю, что достал с ней, но в этом плане на неё должны все равняться)
Да, только одну тему прочитать успел, а уже достал За тем какая java "хорошая", не видно что ты хочешь сказать. Основные аргументы "как в java" и "правильно".

Так что я бы не отказался поподробнее узнать, чем плохи promise'ы или как их "правильно" реализовать. И по поводу потоков, нужны именно потоки, или worker'ы тоже подойдут? А я пока присоединюсь к melky, будем тихонько ненавидеть java

По поводу стандартной библиотеки, я бы конечно соврал, если бы не заметил аргумент "хочется большей стабильности", но чем больше стабильность, тем меньше развитие (как считают к слову некоторые иностранные коллеги). Я лично за эволюцию

P.S. Если же положение дел так сильно не нравится, всегда можно fork'нуть репозиторий и сделать что-нибудь. Ну или на java перейти, если не вариант
Ответить с цитированием
  #93 (permalink)  
Старый 27.04.2015, 11:19
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Так что я бы не отказался поподробнее узнать, чем плохи promise'ы или как их "правильно" реализовать.
Асинхронный код, неудобная обработка ошибок. Эти проблемы решают async / await, которые по сути являются сахаром над Promise и хорошо зарекомендовали себя в других языках. В ES7 ожидается поддержка, но с Babel можно юзать уже сейчас.

async function foo() {
    try {
      const data = await getData();
      const more = await [getMoreData(), getMoreData()];
    
    } catch (err) {
      ...
    }
}


Цитата:
И по поводу потоков, нужны именно потоки, или worker'ы тоже подойдут?
Я был бы рад и воркерам.
__________________
kobezzza
code monkey
Ответить с цитированием
  #94 (permalink)  
Старый 28.04.2015, 14:57
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Ну вообще я надеялся на какое-то более подробное описание/сравнение. Пока разбирался, вот что нашел, с интересными ссылками.

Итого, вариант c помощью babel:

require('babel/register');

function getData() {
  return new Promise(function(resolve, reject) {
    resolve('getData');
  })
}

function getMoreData() {
  return new Promise(function(resolve, reject) {
    resolve('getMoreData');
  })
}

async function foo() {
    try {
      const data = await getData();
      const more = await* [getMoreData(), getMoreData()];
      console.log(data);
      console.log(more);
    } catch (err) {
      console.log('error');
    }
}

foo();


Который запускается так:

Код:
$ sudo npm install --global babel
$ npm install babel
$ babel --stage 0 1.js | node

И вот вариант без него:

function getData() {
  return new Promise(function(resolve, reject) {
    resolve('getData');
  })
}

function getMoreData() {
  return new Promise(function(resolve, reject) {
    resolve('getMoreData');
  })
}

function foo() {
    getData().then(function(value) {
        this.data = value;
        return Promise.all([getMoreData(), getMoreData()]);
    }).then(function(value) {
        console.log(this.data);
        console.log(value);
    }).catch(function() {
        console.log('error');
    });
}

foo();


Так?

P.S. И там что-то было про домены какие-то, можно ссылку? А то не гуглится.

И про X server, хотя это к melky. Что с ним не так?
Ответить с цитированием
  #95 (permalink)  
Старый 28.04.2015, 15:02
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
И там что-то было про домены какие-то, можно ссылку?
https://nodejs.org/api/domain.html. Это костыль для обработки ошибок в асинхронном коде, сейчас, с появлением generator expressions, становится deprecated.

Цитата:
Итого, вариант c помощью babel:
Забыл про очень классные стрелочные функции:
function getData() {
  return new Promise((resolve, reject) => {
    resolve('getData');
  });
}
Ответить с цитированием
  #96 (permalink)  
Старый 29.04.2015, 19:36
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Erolast Посмотреть сообщение
https://nodejs.org/api/domain.html. Это костыль для обработки ошибок в асинхронном коде, сейчас, с появлением generator expressions, становится deprecated.
[/js]
а почему костыль обоснуешь? и как это связано с generator expressions?

Вообще да, честно говоря я сначала думал, что за проблемы с читабельностью при использовании promise'ов? А потом посмотрел на то, что получилось в предыдущем сообщении... Хотя с другой стороны, вот вы тут жалуетесь, а на другой стороне планеты бородатые мужики на c херачат, а некоторые вообще на assembler, и ничё

Но это так, отступление. Собственно, почему все так прицепились к этим промисам? Придумали проблему и мужественно ее решаем? Звучит умно? Я как-то давно тут на форуме предлагал такую штуку как AsyncChain. Правда там не было аналога Promise.all, но в чем дело давайте придумаем:

function foo() {
    var onError = function() {
        console.log('error');
    };
    new AsyncChain({onError: onError})
        .add(function(NEXT1) {
            this.data = 'getData';
            return NEXT();
        })
        .add(function(NEXT1) {
            var this1 = this;
            new AsyncAllChain({onError: onError})
                .add(function(NEXT2) {
                    this.var1 = 'getData';
                    return NEXT2();
                });
                .add(function(NEXT2) {
                    this.var2 = 'getData';
                    return NEXT2();
                })
                .add(function() {
                    this1.more = [this.var1, this.var2];
                })
                .go();
            return NEXT1();
        })
        .add(function() {
            console.log(this.data);
            console.log(this.more);
        })
        .go();
}

foo();


Вроде бы ничего не забыл. Ну это не то чтобы окончательный вариант, критика приветствуется, давайте придумаем как сделать так, чтоб всем было хорошо Ну или почти всем, потому что если всем, то тогда promise'ам альтернатив нету, думаю.

И по поводу интересных ссылок, альтернативный вариант.

Что там дальше? Потоки? Я собственно почему веб воркеры вспомнил? В свое время дедушка Douglas Наше Все Crockford рассказывал, чем так хорош nodejs (можно смотреть с начала, там все интересно) и в чем самая большая ошибка java (the biggest design mistake in java, на 8-ой минуте, 08:40). Понятно, что это для вас не авторитет. Да и я не то чтобы с ним во всем согласен. Но он один из двух людей, которых интересно слушать И, кстати, его речь проще всего понимать.

Опять я отвлекся, в общем он там говорит, что потоки — это сложно. Event loop наше все. И веб воркеры один из вариантов решения проблемы долгих вычислений. В чем разница? В том что веб воркеры не шарят состояние с основным потоком. Не нужны блокировки и прочая муть. Что говорит google? Что потоки уже есть в nodejs (безопасные, без sharing state). Что можно форкать процессы. И что есть даже модуль cluster, который решает смежную проблему. Так чего же вам не хватает, м?

Ну, вроде все проблемы решил, или не?

P.S. Приведите какой-нибудь use case для Promise.all(), плз?
Ответить с цитированием
  #97 (permalink)  
Старый 29.04.2015, 19:58
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

x-yuri,
Цитата:
P.S. Приведите какой-нибудь use case для Promise.all(), плз?
Например, нам нужно одновременно загрузить несколько ресурсов из сети и только после этого запустить функцию обработчик.
Ответить с цитированием
  #98 (permalink)  
Старый 29.04.2015, 21:19
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

каких ресурсов?
Ответить с цитированием
  #99 (permalink)  
Старый 29.04.2015, 22:29
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

x-yuri,
нужных ресурсов. Неужели сложно представить? Например, куча картинок.
Ответить с цитированием
  #100 (permalink)  
Старый 30.04.2015, 00:05
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Если бы не было, я бы не спрашивал. На данный момент мы имеем `async await * [getPicture(), getPicture()]`, но непонятно, что это за приложение. Это сайт? И зачем ему скачивать картинки? Т.е. меня интересует не содержимое функции foo(), а то что за ее пределами, контекст. Если это распространенная операция, то привести пример не должно составлять проблемы. Можно даже несколько Спасибо.

Последний раз редактировалось x-yuri, 30.04.2015 в 00:19.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Реализация функции JavaScript, меняющей содержимое ячеек таблицы по событию onchange BOJIKOJIAK Events/DOM/Window 1 24.05.2010 05:50