На этом заключительном видеоуроке мы познакомимся с другим способом создания многопоточного сервера. Если на предыдущем уроке у нас "крутилось" несколько копий одной программы, то теперь мы будем создавать новый поток при каждом подключении клиента.
Сравните оба варианта и напишите в отчёте, какой подход вам больше понравился и почему.
Дата отправки отчёта:
11 декабря 2018 г.
Задание выполнено: за
2 час. 52 мин.
Чему научился:
Чтобы организовать динамичную многопоточность, мне нужно было придумать как организовать хранение запущенных потоков. В моем случае нет доброго сборщика мусора, я не могу просто так создать анонимный поток и забыть про него, будет утечка памяти. Поэтому для хранения запущенных потоков выбрал двусвязный список в качестве структуры данных, чтобы можно было легко удалять отработавшие потоки из середины списка. Потребовалось освежить знания о том, как добавлять и удалять элементы из списка. Написал свой простой двусвязный список. Чтобы вовремя удалять потоки из списка, мне нужно было пойти дальше и изучить системный вызов poll, который в течение указанного таймаута ждёт подключения клиента. Если клиент пришёл - он обрабатывается acceptом, для него запускается новый поток и потом выполнятся очистка памяти. Если клиент не пришел, accept пропускается и сразу выполняется очистка памяти.
В уроке был вопрос, как можно прервать работу сервера. В моем случае я просто посылаю сигнал SIGINT с помощью Ctrl+C. Но чтобы полностью очистить память перед выходом, мне потребовалось научиться перехватывать сигналы. Вариант с динамичной многопоточностью лучше, чем с фиксированной, так как ресурсы не простаивают зря.
На видео я запускал клиенты с помощью bash-скрипта, который принимает в качестве параметров количество клиентов, интервал генерации случайных чисел и интервал между обращения к серверу. В общем, хорошо попрактиковался, очень доволен, спасибо :)
Исчерпывающий отчёт. Вдвойне удивительно, что так быстро было сделано.
Отчёт оценивали: 17947. Dmitry Sinitsin+110365. Rita+13922. Александр+110558. Иван Воронин+1791. Валерий Жданов+120071. New programist+110494. Алексей В.+117606. Виктор+13747. Сергей+11. Евгений Волосатов+119384. Владимир+1
Начинаем практику по языку C#
Чтобы стать хорошим программистом — нужно писать программы.
На нашем сайте очень много практических упражнений.
После заполнения формы ты будешь подписан на рассылку
«C# Вебинары и Видеоуроки»,
у тебя появится доступ к видеоурокам и консольным задачам.
Несколько раз в неделю тебе будут приходить письма —
приглашения на вебинары, информация об акциях и скидках,
полезная информация по C#.
Научился: Данный способ лично мне нравится больше, чем способ из прошлого урока, тем, что ресурсы выделяются динамически по мере надобности при этом производительность и ожидание клиентов сводится к минимуму. Вариант же из прошлого урока имеет лишь один плюс, ты точно знаешь сколько ресурсов понадобится для работы сервера, но его будет очень просто перегрузить и вывести из строя, данную же реализацию таким способом перегрузить будет сложнее, особенно если сервер располагает огромными ресурсами. Отличный курсик, советую всем, очень много интересный исследований проведено.
Научился: Реализовали многопоточный сервер, создающий соединение для каждого клиента, воспользовались лямбдой, код отрефакторили, программа стала универсальней и изящней.