2) (На правах идеи, не факт, что это приемлемо). Я бы вынес всю работу за пределы callback-ов. То есть, в callback-е только лишь заполняется очередь действий, а в конце event loop-а эта очередь разбирается и выполняются все действия
Пересчитал стоимость еще раз. Если исходить из этой транзакции etherscan.io/tx/0x25e54394ab4e5f17d6e1240c02c1a6c4bb675ef9471f1105b006988f5fe5aec1
То по текущему курсу на 45 кб данных нужно 130$
Но при этом gas price довольно большой, 50Gwei. Если словить момент, то вполне можно отправить и за 1Gwei (а то и меньше).
Таким образом, в 1 килобакс можно уместить чуть меньше 20Мб данных, что вполне неплохо. А если еще дождаться падения курса, или использовать какой-нибудь ethereum classic, то выйдут вообще копейки
Тогда да. Хотя врядли 180 мегабайт (к томуже в запакованном виде) весят именно исходники. Почти наверняка там бинарные данные, сторонние библиотеки и т.д.
Не обязательно сохранять в биткоине. Можно и в эфире, например. по моим подсчетам, 200 kb данных там будут стоить около 1000 долларов. Тоже много, но не так уж и неподъемно.
Или можно выбрать другие валюты типа bitcoin cash
(Да и вообще это была шутка)
> Увеличивается латентность обработки очередного запроса. Так, если в данный момент нет никаких активных запросов и поступает новый входящий HTTP-запрос, то curl-нить получит информацию о нем только после выхода из очередного вызова this_thread::sleep_for().
Если в request_info_queue_t добавить condition variable, то от этой задержки можно избавиться.
Вот например такой псевдокод
std::condition_variable cond_;
void push(...) {
std::lock_guard<mutex> lock(mut);
// push
cond_.notify_one();
}
void pop(Acceptor && acceptor, function<bool()> func) {
std::unique_lock<mutex> lock(mut);
while (true) {
if (cond.wait_for(lock, milliseconds(50), [](){return !queue_.empty()})) {
break;
} else {
if (func()) { return; }
}
}
// pop elements
}
// Вызов функции
pop(accessor, [](){
int numfds;
curl_multi_wait(..., 0, &numfds);
return numfds != 0;
}
Я наоборот задавал вопрос, пытаясь выяснить, что побуждает людей после 8-9 часов на работе программировать еще 4-7 часов дома (или подолгу задерживаться на работе и считать это нормальным)
Да, поначалу это может казаться интересным и увлекательным, но в последствии, как мне кажется, теряет смысл.
> В чем мотивация тех, кому нравится искусство?
Сменить область деятельности. С программирования на что-то иное. Если человек всю жизнь занимается только и исключительно искусством, то это тоже наверно, немного странно
> что-то абстрактное, программирование например
Под программированием обычно подразумевается что-то более конкретное. Хотя я не знаю, может быть есть и «абстрактное» программирование (например, функциональные языки), но опять же, зачем? Чем математика хуже, например? (Если накидаете сюда «абстрактных» программистских задачек, то буду только рад)
> что это вопрос всей жизни
Мы обсуждаем людей, которые готовы программировать по 16 часов в сутки. Что это, если не вопрос всей жизни?
> интерес к дизайну ничем не похож на интерес к искусству
Ну, если дизайнер интересуется еще и искусством (хотябы читает раз в месяц какую-нибудь книжку, или смотрит фильм на выходных) то ничего плохого не вижу.
Видимо, в качестве «искусства» вы видите что-то возвышенное: хождение по музеям, участие в археологических раскопках. Но нет, я вкладывал в это слово смысл «почитать книжку вечером» например
Ну а кому нужны эти ваши системы и «миры»? Почему вы игнорируете (если игнорируете) произведения искусства, классических писателей, режиссерев и т.д., но думаете, что от вашего «творчества» все будут прям «офигевать»?
Извините, если грубо получилось
А вот я не понимаю мотивацию тех, кому не интересно ничего: ни развлечения, ни искусство, ни семья/друзья, ни спорт, ни общение. Но почему-то интересно именно программирование. Не что-нибудь абстрактное, математика например, а именно программирование. Откуда такая логика? Типа «меня не интересует мнение людей о политике, искусстве, семье, но то, что людям не нравятся прямоугольнички с нескругленными углами — это прям вопрос всей жизни. Пошел учить новый фреймворк». Как так?
Мне кажется, в случае биткоина нужно не запрашивать у пользователя адрес, с которого он будет посылать, а генерировать новый адрес для принятия платежа. Так как у пользователя может быть множество адресов на одном аккаунте и он сам может не знать, с какого адреса кошелек проведет транзакцию
Вроде Rammstein официально отказывается сотрудничать с различными online radio. Так что его скорее всего нигде нет (не проверял). Хотя metallica тоже до недавнего времени не сотрудничала, а в этом году стала. Может, и Rammstein за ними подтянутся
Нужно при вызове epoll_ctl указывать флаг EPOLLONESHOT. Тогда пробуждаться будет один поток.
Насчет реальных примеров, сам сталкивался только с примерами n потоков n epoll-ов. Почему делают именно так, сам не знаю, может, так реально лучше. Но мне всегда казалось, что вариант с 1-м epoll-ом правильнее (нагрузка распределена между всеми потоками, значит, не будет проседаний у какого-то потока)
> Я знаю 3 популярных варианта работы с epoll в многопоточном приложении:
Есть еще 4-й способ:
N потоков на одном epoll-е (без отдельного потока, который принимает соединения). То есть, каждый поток будет регистрировать новые сокеты (если эта работа достанется ему). Дополнительно можно провести оптимизацию: попытаться сразу прочитать из зарегестрированного сокета, не добавляя его в epoll, вдруг туда уже что-то записали
2) (На правах идеи, не факт, что это приемлемо). Я бы вынес всю работу за пределы callback-ов. То есть, в callback-е только лишь заполняется очередь действий, а в конце event loop-а эта очередь разбирается и выполняются все действия
etherscan.io/tx/0x25e54394ab4e5f17d6e1240c02c1a6c4bb675ef9471f1105b006988f5fe5aec1
То по текущему курсу на 45 кб данных нужно 130$
Но при этом gas price довольно большой, 50Gwei. Если словить момент, то вполне можно отправить и за 1Gwei (а то и меньше).
Таким образом, в 1 килобакс можно уместить чуть меньше 20Мб данных, что вполне неплохо. А если еще дождаться падения курса, или использовать какой-нибудь ethereum classic, то выйдут вообще копейки
Или можно выбрать другие валюты типа bitcoin cash
(Да и вообще это была шутка)
Если в request_info_queue_t добавить condition variable, то от этой задержки можно избавиться.
Вот например такой псевдокод
Да, поначалу это может казаться интересным и увлекательным, но в последствии, как мне кажется, теряет смысл.
Сменить область деятельности. С программирования на что-то иное. Если человек всю жизнь занимается только и исключительно искусством, то это тоже наверно, немного странно
> что-то абстрактное, программирование например
Под программированием обычно подразумевается что-то более конкретное. Хотя я не знаю, может быть есть и «абстрактное» программирование (например, функциональные языки), но опять же, зачем? Чем математика хуже, например? (Если накидаете сюда «абстрактных» программистских задачек, то буду только рад)
> что это вопрос всей жизни
Мы обсуждаем людей, которые готовы программировать по 16 часов в сутки. Что это, если не вопрос всей жизни?
> интерес к дизайну ничем не похож на интерес к искусству
Ну, если дизайнер интересуется еще и искусством (хотябы читает раз в месяц какую-нибудь книжку, или смотрит фильм на выходных) то ничего плохого не вижу.
Видимо, в качестве «искусства» вы видите что-то возвышенное: хождение по музеям, участие в археологических раскопках. Но нет, я вкладывал в это слово смысл «почитать книжку вечером» например
Извините, если грубо получилось
Насчет реальных примеров, сам сталкивался только с примерами n потоков n epoll-ов. Почему делают именно так, сам не знаю, может, так реально лучше. Но мне всегда казалось, что вариант с 1-м epoll-ом правильнее (нагрузка распределена между всеми потоками, значит, не будет проседаний у какого-то потока)
Есть еще 4-й способ:
N потоков на одном epoll-е (без отдельного потока, который принимает соединения). То есть, каждый поток будет регистрировать новые сокеты (если эта работа достанется ему). Дополнительно можно провести оптимизацию: попытаться сразу прочитать из зарегестрированного сокета, не добавляя его в epoll, вдруг туда уже что-то записали