Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (7)

Наибольший вклад в теги

Все теги (31)

Лучшие ответы пользователя

Все ответы (42)
  • Какие задачи решает реактивное программирование?

    @Hydro
    C#/.NET Developer
    Надеюсь, что правильно понял Ваш вопрос.

    Пример

    Храню в БД фото с марса в формате HD, делаю запрос на 100 фотографии, задача - показать 100 фоток последовательно на экране.

    Стандартный поход: делаю запрос к базе на 100 фотографии, жду 2 секунды, получаю массив из 100 фотографии,
    итератором бегаю по коллекции и показываю картинки на экране
    псевдокод:

    pics = GetPicsFromDatabase();
    foreach(var pic in pics)
      ShowPic(pic)


    Реактивный подход: делаю запрос к базе на 100 фотографии и обработчику запроса задаю коллбек, обрабатывающий следующий элемент коллекции

    псевдокод:
    // somecode
    GetPicsFromDatabaseReactive(NextPictureHandler);
    // somecode
    NextPictureHandler(Image pic)
    {
      ShowPic(pic)
    }

    В первом случае мы сами явно вытягивали следующий элемент списка (pull), а во втором случае - источник данных сам вкидывал нам следующий элемент, когда он был готов (push).
    В первом случае мы ждем, пока сформируется источник данных (как правило занимаем тред) и после этого сами ручками просматриваем результат, во втором случае источник данных сам нас уведомит, когда будет готов.

    Что это нам дает?
    Асинхронность - в UI например это дает отзывчивость)
    Масштабируемость - источник данных (коллекция картинок) и приемник (наш псевдкод, показывающий картинки) не связаны, отсутствие связи дает нам возможность подключить хоть 10 обработчиков картинок (пример один в черно-белом выводит, другой сепию накладывает и т.п.)
    Отказоустойчивость достигается тем, что если сдох первый обработчик, например в его треде вылетел эксепшн, который повалил тред (прошу прощения за грубый пример), то действие выполнится резервным обработчиком (мы же их можем навешивать хоть 10, правда?)
    Ответ написан
  • Что почитать по C для ознакомления?

    @Hydro
    C#/.NET Developer
    Керниган, Ритчи, Язык программирования СИ.
    Свой путь в программировании я начал с этой книги.
    Ответ написан
  • Что изучать C# или С++?

    @Hydro
    C#/.NET Developer
    Поскольку не указана область применения, буду субъективен - c#
    Ответ написан
  • Бесплатный проект для портфолио превратился в бесконечный. Как быть?

    @Hydro
    C#/.NET Developer
    Как я понимаю, между Вами и заказчиком есть джентельменское соглашение, которое Вы не хотите нарушать, ибо чревато для отношений или Вашей репутации (или Вашей совести).
    Будь я на Вашем месте, я бы обсудил этот момент с заказчиком, объяснив, что бесконечные хотелки, не указанные в ТЗ сильно отвлекают от основной цели - сделать продукт, т.к. дорабабывать его натфилем можно бесконечно.
    А дальше смотреть как разворачивается ситуация: если заказчик наглеет и продавливает свои интересы, то закончит проект, выполнив обязательства по ТЗ, особо не заморачиваясь на юзабилити. Но если человек адекватен, то должен понять Вашу ситуацию.
    Ответ написан
  • Async и Await C# в потоке (Thread) без событий. Нужно ли?

    @Hydro
    C#/.NET Developer
    Async / Await - это сахар для оптимального использования пула потоков, можно обойтись без него, а если нужно использовать все треды на полную катушку, то следует использовать Async / Await.
    Навскидку скажу только такие ситуации, где он необходим:
    1) Чтобы избавиться от синхронных вызовов долгих вычислений в потоках, критичных к скорости выполнения. Как раз частный случай - пример, который описал Haze Max. Но нельзя забывать, что в WPF и WinForms, чтобы после этих вычислений что-то делать с окошком, нужно отмаршалиться обратно в UI поток.
    2) Интенсивный IO - чтобы не останавливать поток, который ждет данные (либо пишет данные) от внешнего ресурса (hdd, сетевая карта например), исполнение кода следует переключать в асинхронный режим, чтобы избавиться от заморозки потока на время ожидания (пока происходит ожидание ответа, тред может выполнить какой-то еще код).
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (4)