All streams
Search
Write a publication
Pull to refresh
82
0
Евгений Охотников @eao197

Велосипедостроитель, программист-камикадзе

Send message
Речь вовсе не про вложенность.

Вот у вас, например, недостаточно просто объявить cor_http_reponse_t и затем вызвать cor_http_response_set_body. Нужно еще предварительно вызвать cor_http_response_init.

Нельзя просто после ev_run сделать return, нужно еще предварительно вызывать cor_http_delete.

Нужно объявлять переменную loop со специальным значением.

Это все детали, которые легко упустить. А потом искать проблемы. Именно поэтому «простой» код на C получается объемнее и требует к себе большего внимания.

Именно поэтому вас и просили написать таки те самые 100 строк кода на C. Дабы вы сами в этом смогли убедиться.
Вообще-то это совсем не тот код. Но раз уж вы хоть каким-то кодом на чистом C разродились, то вот его аналог на C++:
#include <iostream>
#include <restinio/all.hpp>

int main()
{
  restinio::http_server_t<> http_server{
    restinio::create_child_io_context(1),
    [](auto & settings) {
      settings.port(8080).address("localhost")
        .request_handler([](auto req) {
          req->create_response().set_body("answer").done();
          return restinio::request_accepted();
        });
    }};

  http_server.open();
  std::cin.ignore();
  http_server.close();

  return 0;
}

Как-то даже на таком тривиальном примере видно, что C-шный код внимания к себе требует побольше.
Эспрессо — это сорт кофе, а не способ приготовления…
А эспрессо-машины придумали для приготовления кофе только этого сорта.
Я не хочу доказывать, что мнение не требует доказательств, мне это кажется очевидным…
Очевидным является то, что бездоказательное мнение не имеет никакого веса и смысла его высказывать не было.
Это не верная аналогия. Да и вообще, сам факт того, что приходится прибегать к аналогиям уже показателен.

Но давайте попробуем на аналогии: в статье говорится, что варить кофе эспрессо быстрее и удобнее, чем варить в турке. И приводятся примеры и того, и другого. А потом приходите вы и говорите: «что-то я не понимаю, как варить кофе эспрессо, по-моему, если заваривать кофе в чайничке, то будет еще проще и быстрее». И когда вас просят продемонстрировать, как вы будете это делать, вы говорите что «это мое мнение, а вообще вон за углом в знаменитой кофейне так варят и нормально получается».
Вы понимаете разницу между мнением и утверждением?
Я не понимаю зачем нужно высказывать мнение, если даже автор не может его подтвердить.
Вот обработка соедниений в nginx:
Ну а пример из статьи с этой самой красотой как будет выглядеть? И вообще-то такие потроха нужно сравнивать с потрохами Asio, а не с кодом, который Asio использует.
На самом деле в статье дана ссылка на те самые 100 строк, с которыми производится сравнение. Любой может пойти и посмотреть: www.boost.org/doc/libs/1_65_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html

В вашем же случае идет голословное утверждение.
Какой смысл был в высказывании мнения, которое вы не можете подтвердить?
Не у всех хватает дыхания читать простыни из «простого» сишного кода. Ну и речь не о том, а о ваших словах «Уверен, что 100 строк C-ного кода будут понятее, чем приведённый пример». Без реального сравнения непонятно, откуда такая уверенность может появится у кого-то еще.
Так может вы их просто напишете и покажете?
Нет, на данный момент нет. Но мысль интересная.
Неудобно. Так ключик в командной строке поменял с -t 2 на -t 8 и запросы полетели не в 2 потока, а в 8-мь, при этом ничего не нужно делать с исходным файлом запросов, в котором этих запросов может быть под миллион, а то и больше.
Вы говорите так, что я никак не могу понять, в чем ваша идея состоит.
Не оправдавшиеся ожидания обычно огорчают.
Так я увидел как раз то, что ожидал.

Ну и повторю еще раз: вы, лично вы, можете видеть что угодно и где угодно. Считаете вы, что акторы Хьюита — это частный случай dataflow actors — никто вам этого не запретит. Статья не про это, а про то, что делать в случае акторов Хьюита.

Разводить демагогию на тему того, что одноколесный, двух-колесный и трех-колесный велосипеды — это все частные случаи для понятия «велосипеда», и еще более частные случаи понятия «транспортного средства», мне не интересно. Поскольку на практике разница между всеми этими типами велосипедов просто значительная.

Вот так же и с акторами, когда их пытаются применить в задачах посложнее студенческой курсовой.
После слов:
То, что actor model Хьюита — частный случай dataflow, ясно любому, кто пытался реализовать и то, и другое.
хотелось увидеть что-то уровнем повыше студенческой курсовой.
Вот об этой. Суть в том, что B не должен знать ни про C, ни про D, ни про E. Да и C, D и E могут узнать про B только на короткий момент времени, после чего забудут о нем.
Ну так первая имплементация из перечисленных там — это Akka Streams и есть, поскольку сам Reactive Manifesto делался, в том числе, и людьми, стоящими за Akka. В том числе и для продвижения Akka.

Тем не менее, посмотрите на спецификацию этих самых reactive streams. Там subscriber должен вызвать Publisher.subscribe для того, чтобы получать сообщения от конкретного publisher-а.

Что для моего примера выше означает, что актор B должен сперва подписаться на паблишеров C, D, E и всех прочих. Это совсем не та ситуация, о которой я говорю.
«Связанные имплементации» — это какие именно? Уже упоминавшиеся выше Akka Streams?
Спасибо, повеселили еще раз. Это что, тестовое задание для трудоустройства в LuxSoft?
А отличается тем, что общее число таких запросов ограничено общим числом акторов.

А общее число акторов мы знаем откуда?

Вы, походу, слишком долго варитесь в области dataflow-программирования. Это там специфика такая, что количество вычислительных сущностей (узлов, процессов) и их взаимосвязи известны заранее.
Отсюда и решение — пусть актор (точнее, один из его входов) сам выступает в качестве запроса, а очередь запросов сделать в виде списка, а не массива.

Либо вы предлагаете то, чего я не понимаю, либо ваша идея в том, чтобы самих акторов прописывать в интрузивный список. Что есть отстой. Ибо работать будет только для ограниченного типа сценариев (например, когда понятно, что запрос типа X к актору B любой другой актор не может отсылать более одного раза.
Вот только в Intel TBB понятие актора не используется, насколько я помню.
Так что исходный тезис о том, можно ли отождествлять dataflow и actor model, все еще нуждается в доказательстве.

Если вы посмотрите на back-pressure из Akka, то увидите, что этот back-pressure сделан не для акторов, а для Akka Streams, дополнительной штуке, которая существует сбоку от акторов.

Information

Rating
5,267-th
Location
Гомель, Гомельская обл., Беларусь
Registered
Activity