powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Linux C++ потоки
25 сообщений из 69, страница 2 из 3
Linux C++ потоки
    #39260858
Shaman_Ist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. А ежели ТС пытается писать софт для коммутаторов "многогигабитных" тем более подобную модель поведения -> Шервуд (лесом, короче).
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39260863
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не надо тут никого в Шервуд посылать. Иди бухай себе с миром
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39261408
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ... не знаю реально-ли стартовать 25 тыщ потоков. Тут по идее должнен быть какой-то диспетчер
типа Круглый-Робин.



не то, чтобы нереально, но просто напросто бессмысленно.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39261412
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДим ты не совсем прав. Твоя формула "логических процов" справедлива для численных методов.
Но ты открой свой собственный диспетчер задач и посмотри сколько процессов и сколько потоков
в каждом (если Windows).


все он прав.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39261421
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле для этой задачи вообще многопоточность не нужна.
Нужно асинхронное выполнение заданий в одном потоке.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39261601
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНа самом деле для этой задачи вообще многопоточность не нужна.
Нужно асинхронное выполнение заданий в одном потоке.
Да это было-бы самое правильное. Интересно почему автор с этого не начал?

А оптимизация - это было-бы уже фаза номер 2.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262150
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитал тему. поржал. вобще поржал. 25 000 потоков! столько я не делал даже для неронной сети ))

есть http://docs.libuv.org/en/v1.x/dns.html
есть boost.asio
есть std::thread, но поток нужен максимум один - для io_loop.

если тс надо, могу скинуть uvbind который я недавно написал для себя (обертка над libuv, очень простая, только там нет dns, надо прикрутить).

мне кажется от 25 000 потокв система загнется (если они все хотят попасть на процессор а не ждут своего io). но может и нет, я не эсперементировал.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262173
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackпочитал тему. поржал. вобще поржал
alexy_blackесли тс надо, могу скинуть uvbind который я недавно написал для себя (обертка над libuv, очень простая, только там нет dns, надо прикрутить).
Сам поржал - дай другому. ТС вообще-то как раз DNS и нужен, нафига ему обертка которая этого не умеет, проще с нуля сделать .

Вот накидал за 5 минут.
Асинхронно выводит все IP указанных хостов или ошибку если хост не найден.
В одном потоке.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include <boost/asio.hpp>
#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> hosts = {"google.com", "yandex.ru"};
    boost::asio::io_service service;
    boost::asio::ip::tcp::resolver resolver(service);
    for (const auto& host: hosts) {
        boost::asio::ip::tcp::resolver::query query(host, "");
        resolver.async_resolve(
                    query,
                    [host](boost::system::error_code ec, boost::asio::ip::tcp::resolver::iterator iter)
        {
            if (ec) {
                std::cout << host << " -> " << ec.message() << std::endl;
                return;
            }
            boost::asio::ip::tcp::resolver::iterator end;
            while (iter != end) {
                auto endpoint = (iter++)->endpoint();
                std::cout << host << " -> " << endpoint.address() << std::endl;
            }

        });
    }
    service.run();

    return 0;
}
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262175
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Мне кажется, можно упростить
boost::asio::ip::tcp::resolver::iterator end => cpp::end of use
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262176
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Вернемся к этому вопросу через 10 лет, когда про D уже забудут
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262182
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySiemargl,

Вернемся к этому вопросу через 10 лет, когда про D уже забудут Про D может и забудут, хотя он тут не упоминался.

Но такой синтаксис ++ еще вопрос сколько народа будет использовать. Лично я - уже маловероятно.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262185
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglПро D может и забудут, хотя он тут не упоминался.
Ну, это единственный реальный кандидат на cpp::end of use. Рад что вы осознаете его шансы )))
А остальные поделки в лучшем случае могут друг друга заменить ))
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262285
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С буст-асио код смотрится тяжеловато.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262291
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonС буст-асио код смотрится тяжеловато.
Напишите за 5 минут любой другой аналог - сравним
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262305
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonС буст-асио код смотрится тяжеловато.
Напишите за 5 минут любой другой аналог - сравним
Увы не смогу. Я уже давно не участник олимпиад и хакатонов и я ничего не пишу за 5 минут.

Но я попробую на досуге написать DNS-резольвер только надо найти хороший список хостов
в количестве 25 0000 строк чтоб смоделировать 1 тест на корректность.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262367
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonС буст-асио код смотрится тяжеловато.если не ошибаюсь тут не нужно будет даже подключать какую-нибудь библиотеку, это только заголовочная библиотека. что тут тяжолово?
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39262392
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорс тяжело читать. Если-бы я делал это на Java то это наверное был-бы
Fork-Join пул потоков в качестве платформы для исполнения и лямбды
в качестве описания алгоритма. Благо он прост. Надо взять поток строк
из файла и передать их набору исполнительных потоков для DNS-ресольвинга
и результат куда-то слить в коллекцию.

Я еще с лямбдами пока на "вы" но наверное кто-то напишет это быстрее меня.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39265990
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arias
Код: plaintext
1.
2.
3.
int find_ip2(vector<string> domains)  {
  ...
}

Лучше передавать по const-ссылке, чтобы не копировать контейнер:
Код: plaintext
1.
int find_ip2(const vector<string>& domains) {


Shaman_IstмногопорочноОтличный термин.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39266030
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Многопорочно - это прямо про отладку асио, удачное определение.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39266039
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky....Вот накидал за 5 минут.
Асинхронно выводит все IP указанных хостов или ошибку если хост не найден.
В одном потоке.

maytonСорс тяжело читать. Если-бы я делал это на Java то это наверное был-бы
Fork-Join пул потоков в качестве платформы для исполнения и лямбды
в качестве описания алгоритма.....
????
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39266058
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskymaytonС буст-асио код смотрится тяжеловато.
Напишите за 5 минут любой другой аналог - сравним


В тему cpp::end of use

40 секунд.....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
$ cat resolv
www.google.com
www.yandex.ru
www.sql.ru


$ for domain in `cat resolv` ; do  nslookup $domain | egrep 'Name|Address' ; done 
Name:	www.google.com
Address: 173.194.71.106
Name:	www.google.com
Address: 173.194.71.147
Name:	www.google.com
Address: 173.194.71.99
Name:	www.google.com
Address: 173.194.71.103
Name:	www.google.com
Address: 173.194.71.104
Name:	www.google.com
Address: 173.194.71.105
Name:	www.yandex.ru
Address: 77.88.55.55
Name:	www.yandex.ru
Address: 77.88.55.66
Name:	www.yandex.ru
Address: 5.255.255.5
Name:	www.yandex.ru
Address: 5.255.255.55
Name:	www.sql.ru
Address: 89.188.113.172
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39266093
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это любой Unix-админ сделает. Автору покажите. Ему ж на сях надо...
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39266104
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДа это любой Unix-админ сделает. Автору покажите. Ему ж на сях надо...


На сях такие вещи надо писать в случае необходимости глубокого
тюнинга сетевого протокольного взаимодействия

Для общих случаев и стандартных протоколов
есть масса готовых инструментов и полуфабрикатов
типа xinetd, netcat, nginx, haproxy, etc.
...
Рейтинг: 0 / 0
Linux C++ потоки
    #39266149
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДа это любой Unix-админ сделает. Автору покажите. Ему ж на сях надо...

Многих начинающие в Unix сбиваются с пути истинного...

потоки и мутексы это не Unix-way.

Unix way - это процессы, конвееры и классический IPC ( разделяемая память,
семафоры, очереди, сокеты).

Сбившись один раз с пути люди
начинают изобретать костыли по поводу и без....

...
Рейтинг: 0 / 0
Linux C++ потоки
    #39266179
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kВ тему cpp::end of use

40 секунд.....
Код: plaintext
1.
for domain in `cat resolv` ; do  nslookup $domain | egrep 'Name|Address' ; done



Это не то что требовалось.
Надо параллельно резолвить.
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Linux C++ потоки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]