Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

 13417

-- Chip

Клиент-серверный сокет / VIP. Динамичная многопоточность

  • На этом заключительном видеоуроке мы познакомимся с другим способом создания многопоточного сервера.
    Если на предыдущем уроке у нас "крутилось" несколько копий одной программы,
    то теперь мы будем создавать новый поток при каждом подключении клиента.

    Сравните оба варианта и напишите в отчёте, какой подход вам больше понравился и почему.
  • Дата отправки отчёта: 11 декабря 2018 г.
  • Задание выполнено: за 2 час. 52 мин.
  • Чему научился: Чтобы организовать динамичную многопоточность, мне нужно было придумать как организовать хранение запущенных потоков. В моем случае нет доброго сборщика мусора, я не могу просто так создать анонимный поток и забыть про него, будет утечка памяти. Поэтому для хранения запущенных потоков выбрал двусвязный список в качестве структуры данных, чтобы можно было легко удалять отработавшие потоки из середины списка. Потребовалось освежить знания о том, как добавлять и удалять элементы из списка. Написал свой простой двусвязный список.
    Чтобы вовремя удалять потоки из списка, мне нужно было пойти дальше и изучить системный вызов poll, который в течение указанного таймаута ждёт подключения клиента. Если клиент пришёл - он обрабатывается acceptом, для него запускается новый поток и потом выполнятся очистка памяти. Если клиент не пришел, accept пропускается и сразу выполняется очистка памяти.

    В уроке был вопрос, как можно прервать работу сервера. В моем случае я просто посылаю сигнал SIGINT с помощью Ctrl+C. Но чтобы полностью очистить память перед выходом, мне потребовалось научиться перехватывать сигналы.
    Вариант с динамичной многопоточностью лучше, чем с фиксированной, так как ресурсы не простаивают зря.

    На видео я запускал клиенты с помощью bash-скрипта, который принимает в качестве параметров количество клиентов, интервал генерации случайных чисел и интервал между обращения к серверу.
    В общем, хорошо попрактиковался, очень доволен, спасибо :)
  • Оценка видео-уроку:
  • Видеозапись: https://youtu.be/znmc-j0Xppw
Отчёт от 13417 за Клиент-серверный сокет / VIP. Динамичная многопоточность


Отчёт от 13417 за Клиент-серверный сокет / VIP. Динамичная многопоточность




Оцени работу

 
Сохранить страницу:

10558. --
Иван Воронин
Иван Воронин
ответить
→  Chip  # Клиент-серверный сокет / VIP. Динамичная многопоточность / 2018-12-11 18:33

Молодец, отлично поработал, удачи в дальнейшем исследовании.


13417. --
Chip
Chip
ответить
→  Иван Воронин  # Клиент-серверный сокет / VIP. Динамичная многопоточность / 2018-12-12 00:23

Спасибо за добрые слова, Иван! Курс понравился, хорошее сочетание клиент-сервера и многопоточности.


1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  Chip  # Клиент-серверный сокет / VIP. Динамичная многопоточность / 2018-12-12 16:15

Исчерпывающий отчёт. Вдвойне удивительно, что так быстро было сделано.


  • Отчёт оценивали:
    17947Dmitry Sinitsin+1   10365Rita+1   3922Александр+1   10558Иван Воронин+1   791Валерий Жданов+1   20071New programist+1   10494Алексей В.+1   17606Виктор+1   3747Сергей+1   1Евгений Волосатов+1   19384Владимир+1  

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Данный способ лично мне нравится больше, чем способ из прошлого урока, тем, что ресурсы выделяются динамически по мере надобности при этом производительность и ожидание клиентов сводится к минимуму. Вариант же из прошлого урока имеет лишь один плюс, ты точно знаешь сколько ресурсов понадобится для работы сервера, но его будет очень просто перегрузить и вывести из строя, данную же реализацию таким способом перегрузить будет сложнее, особенно если сервер располагает огромными ресурсами. Отличный курсик, советую всем, очень много интересный исследований проведено.



Научился: Реализовали многопоточный сервер, создающий соединение для каждого клиента, воспользовались лямбдой, код отрефакторили, программа стала универсальней и изящней.