Как подключить проходную розетку: Установка и демонтаж розетки стоимость. Схема подключения проходных розеток
Установка и демонтаж розетки стоимость. Схема подключения проходных розеток
Как же правильно менять или устанавливать розетки. Электрическая розетка — основной источник энергии в доме, через который мы пользуемся благами электроэнергии. Рассмотрим самую обычную розетку с заземляющим контактом.
Выглядит она так
Вы можете купить проходные розетки Legrande Valena по 92р за шт. — обращайтесь к менеджерам
У каждой розетки имеется два входа: фаза и ноль. Для бытовых приборов полярность не имеет значение, то есть как вставлять вилку в розетку — неважно. Третий контакт – заземляющий, он предназначен для чрезвычайных ситуаций, например при пробое фазы на корпус электроприбора, ток должен будет стечь по заземляющему проводнику.
Все стандартные розетки (не стандартные розетки мы не рассматриваем), рассчитаны на ток не более 16 ампер, то есть в них можно вставлять приборы мощностью не более 3,3 Киловатт. Все что потребляет больше энергии – требует специальных, силовых розеток.
Силовые розетки
Как правильно установить розетку?
Прежде чем начать какие-то работы, по замене или установке розеток, отключите питание в щите, — выключите автомат или выкрутите пробки, или что там у вас? Не забудьте прилепить на автомат скотч или изоленту, или просто предупредите, чтобы их случайно не включили. Обязательно проверьте индикатором отсутствие фазы на проводах. Наличие индикатора при работе с электричеством обязательно!
Хороший индикатор от ИЕК
Плохой индикатор — не покупайте такой
Если взять, и посмотреть на снятую розетку с обратной стороны, то мы увидим болтовые зажимы (бывают еще и пружинные зажимы), в которые должен вставляется провод. Болтовые — затягиваются при помощи отвертки, пружинные — зажимаются пальцами рук. Определенно можно сказать, что болтовые зажимы намного надежнее пружинных. Также на розетке с заземлением, должен присутствовать третий зажим, он обычно отличается от двух других, и обычно находиться по середине. Главное не перепутать и не вставить в него фазный провод.
Зажимы в розетках
Электрики по привычке, начинают с желто-зеленого провода заземления и заканчивают фазным. В нашем случае, с какого провода начинать не имеет никакого значения, главное правило, — зажим должен крепко держать провод. Одна из основных причин возгорания электропроводки, — это плохой контакт. В лучшем случае, плохо зажатый провод приведет к треску в розетке. В зажим заземляющего контакта вставляется желто-зеленый провод. Фазный провод (любой цвет) и нулевой (синий) вставляются в любой из 2х оставшихся зажимов. Важно не перепутать, и не вставить фазный провод в зажим заземляющего контакта. Тщательно зажимаем провода, закручивая болтик отверткой, после — проверяем, с небольшим усилием потянув провод от зажима себя.
Важно помнить! Что запас кабеля, выходящего из подрозетника, должен составлять не менее 10 сантиметров! Никогда не жалейте кабель, и оставляйте запас побольше. Практикующие электрики, обычно оставляют сантиметров 20 запаса, чтобы наверняка. Для того чтобы розетка легко встала в подрозетник, и провода внутри подрозетника не мешались, 10 см — это оптимально.
Запас кабеля
Расплетаем кабель и зачищаем провода (как зачищать провода). Обрезаем оголенный провод, чтобы он выступал из изоляции на 1 см, не больше! Внешнюю изоляцию кабеля отрезаем, лучше ее убрать как можно больше, чтобы она также не мешала встать розетке ровно.
Когда розетка установлена в гнездо, остается закрепить ее саморезами к подрозетнику, при этом выровняв розетку по уровню, и закрутить распорки если они есть. Именно в такой последовательности! Сначала саморезы, потом распорки, после этого (если подрозетник установлен правильно), можно быть уверенным, что розетка установлена правильно!
Иногда корректно поставить розетку не получается, из-за плохого посадочного места (подрозетника), или розетки без распорок. В таких случаях, все бывалые электрики начинают импровизировать: подкладывать что-то под распорку, сверлить отверстия возле подрозетника, или вкручивать длинные саморезы, — кто во что горазд.
Установка проходных розеток
В большинстве случаев розетки являются проходными, то есть. в один зажим такой розетки можно вставить 2 провода. Один провод подает напряжение, второй отдает его дальше. В проходные розетки можно вставлять провода разных металлов, но обязательно одинаковым сечением и чтобы они не соприкасались между собой (вставлять через болт), чтобы зажим нормально прижал два провода.
Количество проходных розеток на одной линии, не может и не должно быть бесконечным. При замене проводки, профессиональные электрики, для расчета количества проходных розеток на линию (при отсутствии проектной документации), руководствуются в первую очередь здравым смыслом. Если розеточная группа будет достаточно загруженной (например кухня), то нужно учитывать максимально возможный потенциал каждой розетки, а это 16 Ампер или 3,3 КВатт на точку. В этом случае, рекомендуется ставить не больше 3-4 розеток. Если же линия будет не слишком загруженной, то мы рекомендуем устанавливать не более 8-10 розеток на линию.
Проходные розетки
Монтаж наружной розетки
Наружная (накладная) розетка отличается только тем, что она наружная — факт! По сути, процесс монтажа наружной розетки одинаков с внутренней, просто накладную розетку необходимо прикрутить к стене. Неважно как Вы это сделаете, просто нужно чтобы она там держалась… хорошо держалась. В остальном подсоединение проводов к зажимам аналогично.
Накладная розетка
Демонтаж розеток
Дело в том, что не каждый умеет правильно снять старую розетку. Так как они бывают разные, то и снимаются по-разному, описать все способы невозможно, подойдет любой, вплоть до выдалбливания перфоратором. В основном чтобы снять внутреннюю розетку, нужно открутить болтик посередине пятачка (как у поросенка), если его нет (болта, не пятачка), то накладка может стоять на защелках, для этого необходимо снять рамку, аккуратно потянув её за угол, после чего станут видны защелки пятачка. Когда все декоративные накладки сняты, можно извлечь внутреннюю часть розетки, ослабив распорку или открутив саморезы по краям (если она прикручена или стоит на распорке).
Если не получается что-то сделать своими силами, то вызов электрика круглосуточно здесь!
Проходная розетка ТВ – устройство, особенности, монтаж
Монтаж и устройство проходной розетки TV
На данный момент на рынке вам может встретиться одинарная, оконечная и проходная ТВ розетка. Все эти изделия отличаются не только названием и имеют разную конструкцию и назначение.
По незнанию многие применяют их не совсем правильно. Из-за чего возникает недовольство качеством ТВ сигнала. Поэтому дабы так же не стать жертвой незнания давайте разберем типы ТВ розеток, а также определим для чего нужны каждая из них.
Типы ТВ розеток и схемы их применения
Для того чтобы правильно разобраться в особенностях монтажа TV розеток, а так же понять где какой вид применяется нам следует рассмотреть не только их конструкцию, но и схемы подключения. Ведь для разводки телевизионного сигнала, в зависимости от его частоты, применяются разные схемы подключения.
Устройство разных видов ТВ розеток
Начнем мы с различий, которые есть у ТВ розеток. Это различие обусловлено разными сферами применения, о которых мы поговорим ниже.
Итак:
- Начнем с наиболее простой одинарной ТВ розетки. Данная розетка представляет собой просто контактное соединение, которое позволяет подключать кабель антенны телевизора к розетке. Как говорит инструкция заводов-производителей уровень падения сигнала на них не превышает 1 – 2 дБ, что обусловлено только переходными сопротивлениями контактных соединений.
- Оконечная розетка в этом плане намного сложнее. Кроме непосредственно контактного соединения она содержит специальную схему, которая предназначена тушить отраженный сигнал.
Что это за схема и зачем она нужна?
Дело в том, что любой телевизор не только принимает телевизионный сигнал, но и отдает часть в сеть. Ту часть, которую он отдает принято называть отраженным сигналом. Мощность отраженного сигнала по сравнению с основным не так высока, но в сумме от нескольких телевизоров — это может давать значительные помехи.
Проходная TV розетка
Итак:
- Отраженный сигнал вы можете видеть на другом телевизоре в виде помех или в виде наложенного изображения. И дабы избежать этого применяется специальная схема, заглушающая отраженный сигнал.
- В результате оконечная розетка кроме потерь в 1 – 2дБ вызванных коммутационными сопротивлениями, имеет еще потери от 8 до 15дБ вызванных работой этого фильтра.
Обратите внимание! ГОСТ28324-89 четко устанавливает, что уровень сигнала должен быть 57 – 83дБ. Увеличение, а тем более уменьшение мощности сигнала ведет к помехам и снижению качества изображения. В результате получаем, что даже одна оконечная розетка значительно снижает уровень сигнала.
- А вот устройство проходной розетки еще сложнее. Кроме непосредственно контактного соединения и фильтра, она имеет еще одно контактное соединение для подключения других ТВ розеток. В результате падение сигнала на такой розетке может доходить до 15 – 20дБ.
Схемы подключения ТВ розеток
Так зачем нужна розетка проходная ТВ, если она так снижает качество сигнала? Дело тут в схемах подключения ТВ розеток. Для каждой и этих схем используется свой тип розеток. Поэтому давайте разберем данный вопрос подробнее.
На фото представлена схема «звезда»
Итак:
- Начнем наш разбор с так называемой схемы «звезда». Суть данной схемы сводится к следующему. Питающий кабель телевизионного сигнала приходит на размножитель или как его еще называют сплиттер.
- Сплиттер разделяет телевизионный сигнал на несколько каналов одинаковой мощности. Количество каналов зависит от типа устройства. Есть сплиттеры на два, три и большее число выходов.
- В сплиттере имеется та самая схема гашения отраженного сигнала. Поэтому применять для нее розетки с дополнительным гашением сигнала не следует.
- Исходя из этого от сплиттера сигнал через телевизионный кабель подается на одиночные ТВ розетки. Применение розеток другого типа не целесообразно так как будет присутствовать двойное гашение отраженного сигнала, что приведет к ухудшению качества изображения.
Обратите внимание! Для подключения цифрового и спутникового телевиденья может применяться только схема «звезда». Использование других схем приведет к значительному падению уровня сигнала, а то и вовсе не работоспособности.
- Вторым возможным вариантом является так называемая проходная схема. Из-за нее ТВ розетка проходная и получила свое название. Суть данной схемы сводится к следующему. Вводной сигнал подключается к первой проходной розетки, от нее запитывается вторая и так далее.
Проходная схема подключения ТВ розеток
- В конце этой схемы обязательно устанавливается оконечная розетка. Как мы уже выяснили она отличается от проходной только наличием всего одного входа. А ее фильтр вполне справляется с отраженным сигналом.
- Главным недостатком такого способа подключения является постепенное ухудшение сигнала в каждой последующей розетке. В то же время цена реализации такой схемы значительно ниже из-за отсутствия необходимости покупки слиттера.
- Вполне удачно применяется и так называемая смешанная схема. Ее суть сводится к подключению части розеток по схеме «звезда», а части по проходной схеме. Это позволяет сэкономить при значительном удалении розеток от сплиттера.
Монтаж проходных розеток
Зная в каких случаях может применяться проходная розетка, можно перейти к вопросу ее подключения. Сделать это вполне возможно своими руками и для этого не потребуется специальных инструментов или навыков.
- Прежде всего устанавливаем закладную коробку для установки розетки. Для ТВ розеток используют такие же закладные, как и для силовых розеток и выключателей. Для этого нам необходимо сделать отверстие в стене соответствующего диаметра. Сделать это можно при помощи перфоратора и соответствующей насадки.
- После этого устанавливаем закладную коробку. Ее можно закрепить саморезами, а можно просто посадить на гипсовые шпаклевки.
- Теперь необходимо проложить телевизионный кабель к розетке и от нее на следующую розетку. Обычно кабель скрывают от посторонних глаз, поэтому без штробления стен вам не обойтись (см. Выполняем штробление стен под проводку своими руками). В противном случае кабель монтируется в специальном пластиковом коробе по стене.
Разделка и подключения кабеля к ТВ розетке
Обратите внимание! Монтировать телевизионный кабель совместно с силовыми проводами запрещено. Ведь повреждение силовой проводки может привести к появлению высокого напряжения на телевизионном кабеле. Это в свою очередь приведет к поломке всех телевизоров. Кроме того, силовой кабель может давать помехи.
- Теперь переходим непосредственно к подключению. Прежде всего зачищаем оба подключаемых кабеля. Как это сделать правильно вы можете увидеть на нашем видео.
- Затем подключаем приходящий кабель. Соответствующее место для подключения на розетке может быть обозначено стрелками, либо цифрами. Для этого откручиваем винты крепления центральной жилы и оплетки и заводим кабель. Перед зажимом кабеля необходимо убедиться, что оплетка и центральная жила не где не соприкасаются.
- После этого по аналогии подключаем кабель, питающий следующую розетку. Здесь достаточно важно не перепутать подходящий и отходящий кабель. В остальном же все точно так. Контролируем что не соприкасается оплетка и центральная жила, а также что кабели не соприкасаются между собой.
- После этого укладывается в закладной коробке запас кабеля и закрепляется наша розетка ТВ проходная. После этого переходим к подключению следующей розетки.
Подключение ТВ розеток с самозажимными контактами
- Нельзя не упомянуть, что многие производители стараясь облегчить и ускорить процесс монтажа используются разнообразные пружинные зажимы или откидывающиеся замки. Процесс монтажа от этого практически не изменяется. Единственное что вам не потребуется пользоваться отверткой.
Вывод
Как видите процесс монтажа проходной, оконечной или одинарной ТВ розетки не так уж сложен. В этом вопросе главное правильно выбрать саму розетку, а также схему ее подключения. Но мы надеемся, что наша статья помогла вам в этом вопросе и теперь вы без трудна выберете и подключите именно ту ТВ розетку, которая соответствует вашей схеме.
Проходная телевизионная розетка: особенности и подключение
Проходная ТВ розетка
На данный момент на рынке достаточно широко представлены одиночные, оконечные и проходные телевизионные розетки. Каждый из этих видов розеток имеет свои особенности, связанные не только со способом установки, но и с применяемой схемой.
Неправильный выбор розетки для каждой конкретной схемы ведет к снижению качества телевизионного сигнала, из-за чего часто можно слышать нелестные отзывы о этих электроустановочных изделиях. Поэтому дабы не ошибиться с выбором советуем ознакомится с нашей статьей.
Особенности проходной ТВ розетки
Прежде всего давайте остановимся на особенностях проходных розеток для подключения телевизионного кабеля. Ведь именно они определяют ее сферу применения, а также качество самой розетки.
Итак:
- Розетка проходная телевизионная получила свое название за возможность подключения сразу двух кабелей. Один из этих кабелей – питающий, обеспечивает подключение нашей розетки к антенне или другому источнику телевизионного сигнала. Второй кабель – отходящий, обеспечивает передачу телевизионного сигнала от данной розетки к другим приемникам сигнала.
- Зачем создавать столько сложностей, если можно просто скрутить питающий и отходящий кабель и тем самым обеспечить прием и передачу сигнала спросите вы? Но здесь не все так просто.
Фильтр на проходной ТВ розетке
- Дело в том, что каждый приемник телевизионного сигнала, в нашем случае телевизор, не только потребляет, но и генерирует сигналы. В связи с этим в телевизионной сети появляются шумы, которые проявляются в виде двойного изображения или помех на экране.
- Дабы исключить эти сигналы от телевизора применяется специальный фильтр. Этот фильтр реализуется при помощи разных схем. Но главная его цель — это подавление шумов в телевизионном сигнале.
- Если вы посмотрите паспорт изделия, то увидите, что любая телевизионная проходная розетка имеет не один как обычная одиночная розетка, а два параметра снижения уровня сигнала. Один из них отражает падение уровня сигнала на прием и обычно не превышает 1 – 3дБ. Это связано с обычными потерями на контактных соединениях.
- Второй же параметр, обычно указывается как потери на проход, значительно выше и составляет от 10 до 15дБ. Это снижение качества сигнала как раз и обусловлено работой фильтра.
- Наличие фильтра, а также возможность подключения отходящего кабеля и являются главными особенностями проходных ТВ розеток. И если такой фильтр еще можно встретить у оконечных ТВ розеток, то функционал не только приема, но и передачи телевизионного сигнала имеет только розетка телевизионная проходная.
Схемы подключения телевизионных розеток
Прежде чем разбирать способы подключения проходных ТВ розеток следует разобраться с вообще существующими вариантами схем подключения телевизионных розеток. Тем более что их не так уж и много, а если быть точным всего два.
Проходная схема подключения телевизионных розеток
Прежде всего давайте рассмотрим более дешевую в плане монтажа проходную схему. Кстати именно эта схема дала название проходным розеткам. Ведь именно для ее реализации они и нужны.
Проходная схема подключения телевизионных розеток
- Суть проходной схемы сводится к следующему. От антенны или другого источника сигнала кабелем подключается телевизионная розетка проходная, от нее подключается еще одна и еще по мере необходимости. И последней в этом шлейфе устанавливается оконечная розетка.
Обратите внимание! Согласно ГОСТ 28324-89 уровень телевизионного сигнала должен составлять 57 – 83дБ. Если же у вас установлен зарубежный источник сигнала, то согласно CENELEC EN 50083-7 для них применяется норма 57 – 74дБ. В итоге получается, что за счет затухания на фильтре проходной и оконечной розетки без дополнительных усилителей можно установить не более трех точек. В противном случае уровень сигнала на последних розетках шлейфа будет заметно хуже.
- Главным преимуществом такой схемы является низкий расход телевизионного кабеля и отсутствие необходимости в приобретении дополнительных устройств.
- Что же касается недостатков, то одним из наиболее весомых является ухудшение качества сигнала по мере удаления от источника сигнала. Дабы исключить эту проблему некоторые доводят уровень сигнала до 90 и 100дБ. Но как следует из практики зачастую это приводит лишь к ухудшению качества изображения. Поэтому единственным выходом может стать установка дополнительных усилителей.
- Еще одним недостатком такой схемы является суммарная большая длина кабеля. Ведь обычно телевизионный кабель прокладывают рядом с силовым. Из-за этого на телевизионном кабеле появляются помехи частотой 50Гц. Современные телевизоры отстроены от помех данной частоты, но отстройки от частот больших гармоник они не имеют. В связи с этим при большом количестве компьютерной техники или преобразователей частоты, которые выдают в сеть помехи больших гармоник, могут возникать достаточно значительные помехи из-за чего ваше видео будет иметь значительные помехи.
Обратите внимание! Прокладывать телевизионный кабель и силовой в одной штробе или коробе запрещено. Это связано с тем, что при повреждении силового кабеля на телевизионном может появится напряжение в 220В и выше. Это приведет к поломке всех телевизоров и экранов в данном шлейфе.
Подключение телевизионных розеток по схеме «звезда»
Вторым возможным вариантом подключения телевизионных розеток является так называемая схема «звезда». Для нее следует применять только одиночные розетки.
Подключение телевизионных розеток по схеме «звезда»
- Одним из основных узлов данной схемы является сплиттер или как его еще называют множитель сигнала. Сплиттер имеет один вход для подключения к источнику сигнала и 2, 3 и большее число выходов. Перед входом в сплиттер может быть установлен усилитель из-за чего цена схемы еще больше возрастает.
- От выходов сплиттера подключаются розетки. Здесь должны использоваться именно одиночные розетки, которые не имеют никаких фильтров. Ведь сплиттер уже имеет встроенный фильтр.
Обратите внимание! Кабель питания сплиттера и отходящие кабели не должны иметь совместной прокладки на сколь-нибудь значимом участке. В противном случае возможна наводка сигналов и снижение качества изображения.
- Одним из основных достоинств данной схемы является одинаково высокий уровень сигнала на всех розетках. Кстати для подключения цифрового или спутникового телевиденья можно использовать только схему «звезда».
- К недостаткам данной схемы кроме ее стоимости относят еще и более высокую сложность работ. Хотя смонтировать такую схему своими руками вполне реально.
Смешанная схема подключения телевизионных розеток
- Дабы снизить стоимость и сложность работ достаточно часто применяют так называемую смешанную схему, которая тоже имеет право на существование. В этом случае от сплиттера подключают часть розеток по проходной схеме, а часть по схеме «звезда». Но такая схема используется очень редко и лишь для большого количества ТВ розеток.
Подключение проходной розетки
Имея представление в какой схеме применяются проходные розетки телевизионные можно говорить о их подключении. Тем более что в этом нет нечего сложного. Главное не перепутать питающий и отходящий кабель.
Итак:
- На первом этапе нам необходимо установить закладные коробки, в которые будет устанавливаться наша розетка. Для этого потребуется отверстие в стене того же диаметра, как и для установки обычной силовой розетки. Кстати закладные коробки так же используются обычные.
- Для создания отверстий наша инструкция советует использовать специальные насадки на перфоратор. В противном случае моно и «дедовским» способом используя молоток и зубило.
- После того как закладная коробка установлена и закреплена с помощью алебастра или саморезов зачищаем оба кабеля. Сначала зачищается основная жила, а затем оплетка, как это продемонстрировано на фото.
Разделка телевизионного кабеля
- Теперь вскрываем крышку розетки дабы добраться до ее контактов. В некоторых моделях этого делать не надо. Ведь в них контакты расположены с обратной стороны розетки.
- Контактная часть розетки может быть выполнена винтовыми или пружинными зажимами. Это не принципиально, хотя лично я отдаю предпочтение винтовым зажимам. Для нас важно правильно закрепить кабель. Для этого запускаем кабель в зажим таким образом дабы центральная жила села в первый контакт, а оплетка кабеля хорошо села во второй контакт.
- Проверяем что оплетка и центральная жила негде не соприкасаются. Это особенно важно ведь такое закорачивание очень сильно снижает качество сигнала. После этого зажимаем контакты. Такую же процедуру выполняем и со вторым кабелем.
- После этого розетка готова к установке. Но перед этим следует в закладной коробке аккуратно уложить запас кабеля. Этот запас должен быть достаточным для повторного подключения.
Монтаж телевизионной розетки с пружинными зажимами
- После этого при помощи специальных зажимов закрепляем розетку в закладной коробке. Все наша розетка готова к использованию.
Вывод
Как видите монтаж проходной или любой другой телевизионной розетки дело достаточно простое. Здесь главное правильно определиться со схемой подключения и уже в соответствии с ней выбрать розетки. И тогда у вас не будет никаких нареканий на их работу и вы всегда будете смотреть телевизор в отменном качестве.
Розетка legrand тв и правила ее установки
Телевизионные розетки Legrand
Розетки ТВ Легранд получили широкое распространение в нашей стране. Их отличает неплохой уровень качества и вполне разумные цены.
В то же время, такие розетки имеют богатый набор характеристик, который несведущего человека может поставить в тупик. Поэтому, если вы уже определились с фирмой производителем, давайте научимся правильно выбирать телевизионные розетки. Кстати, описанные нами правила подойдут при выборе телевизионных розеток любых других производителей.
Виды телевизионных розеток
Прежде всего, давайте определимся с видами телевизионных розеток и сферой их применения. Вы удивитесь, но существуют разные типы розеток, предназначенные для разных схем. Это могут быть одиночные или обычные розетки, проходные и оконечные.
Применение розетки, не соответствующей схеме подключения, приведет к снижению качества сигнала. Поэтому, на первом этапе давайте разберемся с вариантами схем подключения.
Схема звезда
Одиночная розетка Легранд ТВ предназначена для установки при подключении по схеме звезда.
Производитель тип подключения называет топологией. И такой тип розеток может применяться только при топологии звезда.
Схема подключения звезда |
Особенность данного типа соединения заключается в том, что кабель от антенны или другого источника сигнала, приходит на так называемый множитель — или как более правильно его называть, сплиттер.
В этом устройстве сигнал разделяется на необходимое количество без потери его качества. К сплиттеру подключаются кабели, которые распределяют сигнал на каждую отдельную розетку. |
На фото усилитель ТВ сигнала |
Существует два типа множителей сигнала.
Одни способны пропускать напряжение усилителя, вторые на это не способны. Но прежде чем разбираться с этим вопросом, давайте определимся: а нужен ли нам вообще усилитель. |
Прямой прием ТВ сигнала |
Усилитель — это устройство, которое подает напряжение 5, 10 или 12В на антенну. Это позволяет увеличить уровень сигнала. Согласно ГОСТ 28324-89, нормальный уровень сигнала должен быть в пределах от 53 до 83дБ.
Если ваша антенна установлена в зоне прямой видимости ретранслятора, то такой уровень сигнала наверняка есть, и как говорит инструкция, усилитель вам попросту не нужен. |
Отраженный ТВ сигнал |
Если ваша антенна закрыта от ретранслятора домами или ландшафтом, то вы принимаете отраженный сигнал.
Причем, сигнал может быть отраженным несколько раз и за счет этого очень слабый. В этом случае усилитель вам просто необходим. |
Сплиттер с возможностью пропуска сигнала усилителя |
Определившись, нужен ли нам усилитель, можно вернуться к вопросу подключения сплиттера. Если наш сплиттер способен пропускать ток усилителя, то обычно на одном из выводов наносится надпись «Power in», «+12В» или просто наносится цветовое обозначение на данном канале.
Дело в том, что пропускать сигнал усилителя может только один канал множителя. И это следует учитывать при подключении. |
Виды сплиттера |
В большинстве же своем, сплиттеры не имеют функции пропускания сигнала усилителя.
В связи с этим, его питание должно организовываться для питающего кабеля телевизионной сети. |
Обратите внимание! Согласно европейскому стандарту CENELEC EN 50083-7, оптимальным уровнем сигнала считается 53 – 74дБ. То есть, верхний предел немного ниже. Но не стоит гнаться за максимальным уровнем сигнала. Его увеличение может привести к прямо противоположным последствиям – ухудшению качества изображения.
Одиночная ТВ розетка Легранд подключается кабелем к множителю. Каждая розетка в схеме получает одинаковый уровень сигнала, который практически равен сигналу, приходящему на сплиттер.
Это является главным преимуществом данной схемы. К недостаткам схемы звезда следует отнести необходимость установки дополнительного оборудования – сплиттера и больший расход ТВ кабеля.
Проходная схема
Проходные (см. Проходная розетка тв: как выполняется установка) и оконечные розетки, предназначены для топологии по проходной схеме. Особенность этой схемы заключается в том, что она не требует дополнительных устройств, но может быть применена только для аналогового телевидения.
Проходная схема подключения
Итак:
- Суть данной схемы заключается в том, что от антенны запитывается первая розетка. От первой розетки вторая, и так далее. Последней в этой схеме устанавливается оконечная розетка. Все остальные розетки должны быть проходными.
- У вас возникает закономерный вопрос, а чем отличается проходная розетка ТВ Legrand от, скажем, одинарной. Дело в том, что работающий телевизор накладывает свой сигнал на отходящий от розетки кабель. В результате, на втором телевизоре в схеме может появиться наложенное изображение или просто помехи.
Проходная ТВ розетка
- Дабы исключить это, применяются специальные фильтры. Они встроены в розетку и полностью блокируют помехи, создаваемые телевизором. Но, как и любое другое защитное устройство, фильтр — это сопротивление, которое снижает уровень сигнала.
- А мы помним, что сигнал, приходящий на первую розетку, должен быть в пределах 57 – 83 дБ. На каждом таком фильтре теряется от 10 до 15 дБ. Плюс коммутационные потери в самой розетке. И у нас получается, что проходная схема способна обеспечить качественный сигнал лишь для двух-трех розеток в схеме. Большее их число снизит уровень сигнала ниже допустимых пределов.
- Как вы можете видеть на видео, оконечная розетка отличается от проходной только количеством выводов. Если к проходной розетке можно подключить два кабеля – питающий и отходящий, то к оконечной подключается только подходящий. А фильтр такой розетки, в большинстве случаев имеет чуть меньшее сопротивление.
Оконечная ТВ розетка
В итоге получается, что проходная схема имеет такое преимущество, как цена монтажа, ведь ТВ кабеля необходимо на порядок меньше, и нет необходимости в дополнительном оборудовании — а также время монтажа.
В то же время, в плане качества сигнала она сильно уступает схеме звезда. Ведь при данном типе соединения каждая последующая розетка имеет более низкий уровень сигнала.
Характеристики розеток
Рассмотрев схемы подключения и виды розеток, мы уже имеем представление о том, что нам необходимо. Но есть еще целый ряд параметров, на которые стоит обратить внимание при выборе ТВ розеток.
О них-то мы и поговорим в этом разделе:
- ТВ розетка Legrand может иметь несколько видов разъемов. Это может быть разъем TV – то есть для приема аналогового сигнала телевидения, R – разъем для приема радио и SAT- разъем для приема спутникового телевидения. Все эти типы отличаются не только визуально.
Нормы отечественного ГОСТа
- Разъем TV предназначен для передачи сигналов в диапазоне 5 – 862МГц. Разъем R позволяет передавать сигналы в диапазоне от 87,5 до 108МГц, а разъем SAT передает сигналы в пределах от 950 до 2400МГц.
Обратите внимание! Разъем TV в розетках Легранд выполнен согласно европейского стандарта DOCSIS v.2.0. Но наш стандарт: ГОСТ Р 52023 распространяется на более широкие пределы 40 – 1000МГц. Это не играет существенной роли в качестве передачи сигнала, но является несоответствием товара установленным в нашей стране нормам.
- Так же при выборе вы наверняка столкнетесь с таким понятием, как затухание на проход. Обычно его значение в пределах 1 – 2дБ. В частности, для любой Легранд розетки ТВ, он составляет 1,5дБ. Данное затухание обусловлено контактными соединениями и является весьма условным, поэтому на него можете не обращать особого внимания.
Технические параметры розеток Legrand
- А вот на затухание на ответвление, которое имеется у проходных розеток, обращать внимание стоит обязательно. Обычно оно составляет от 10 до 15дБ. Для розеток Легранд оно составляет 14дБ. Для оконечных розеток оно обычно немного ниже, и составляет порядка 10дБ.
- Последним отличием является способ крепления кабеля к розетке. Обычно все ТВ розетки крепятся при помощи винтовых или пружинных зажимов. При этом требуется разделывать кабель.
Правила монтажа розеток с автоматическими клеммами
Компания Легранд разработала свой способ быстрого монтажа. Он позволяет выполнить монтаж своими руками без разделки кабеля. Но таким приспособлением оборудованы не все модели, поэтому при покупке убедитесь, что розетка оборудована автоматическими клеммами.
Вывод
Конечно, legrand ТВ розетка не является идеальным решением всех проблем. Она так же имеет свои недостатки, и, по сути, мало чем отличается от продукции других торговых марок.
Ведь ТВ розетки не являются каким-то инновационным и технологичным товаром. Здесь уже все давно продумано и решено. Поэтому все возможные проблемы с работой ТВ розеток зачастую связаны не с производителем, а с неправильным выбором типа розетки под каждую конкретную схему.
Схема подключения розеток
Приветствую вас, уважаемые читатели сайта elektrik-sam.info.
В этой статье мы подробно рассмотрим, как правильно подключить розетку и различные схемы подключения.
Розетка служит для подключения электроприборов к электрической сети и в общем случае имеет два контакта в виде гнездового разъема и пружинные контакты заземления.
К силовым контактам розетки подключается фазный провод L (красный) и нулевой рабочий N (синий), к пружинному контакту подключается защитный PE-проводник (желто-зеленый).
Давайте рассмотрим схему подключения розеток в жилых зданиях.
Из электрического щита по трех-проводному кабелю в ответвительную коробку заводится фаза (красный), ноль (синий) и заземление (желто-зеленый) от автоматического выключателя розеточной группы.
В ответвительной коробке кабель от электрощита разветвляется — один идет к розетке, а другой в другую ответвительную коробку, для подключения других розеток. Последняя розетка в группе (на рисунке розетка 3) подключается в той же коробке, что и розетка 2. Т.е. для нее отдельная коробка не нужна.
В ответвительных коробках одноименные провода соединяются цвет в цвет: фаза с фазой, ноль с нулем, заземление с заземлением. Места соединения на рисунке показаны жирными точками.
В случае двухпроводной электропроводки без третьего отдельного заземляющего провода, так называемой «двухпроводки», которая встречается в домах старой постройки, схема подключения розеток будет выглядеть так же, только будет отсутствовать третий желто-зеленый провод.
В этом случае сами розетки необходимо использовать без заземляющего контакта.
В настоящее время используется большое количество бытовой техники и электроприборов, и для удобства подключения вместо одной отдельно установленной розетки используются розеточные блоки на две, три и более розеток.
Как правильно подключить розетку в этом случае? Одна из розеток соединяется с проводом, идущим от ответвительной коробки, а остальные подключаются к первой розетке этого розеточного блока через винтовые клеммы.
На рисунке выше показана схема подключения блоков розеток в электропроводке квартиры.
Блок розеток устанавливается в общую рамку, которая бывает на две, три, четыре и пять розеток.
В двухпроводной электропроводке отдельный провод заземления не используется, и схема подключения розеток будет иметь вид, как на рисунке ниже.
Таким образом, основные схемы как правильно подключить розетки мы рассмотрели.
Рекомендую посмотреть видео Как подключить розетки:
Полезные материалы по теме:
Расчет сечения кабеля.
Схема подключения автоматического выключателя.
Как выбирать автоматические выключатели, УЗО, дифавтоматы?
Автоматические выключатели УЗО дифавтоматы — подробное руководство.
Как подключить одноклавишный выключатель?
Как подключить двухклавишный выключатель?
Схема подключения проходного выключателя.
Электрощит своими руками.
Как выбрать квартирный электрощит.
Как электричество попадает в дом?
Подробная схема подключения розетки
Схема подключения розетки довольно проста в своем исполнении и наверняка пригодиться в арсенал строительного опыта каждому мужчине. Делая ремонт в очередной раз, наверняка хотелось где то добавить дополнительную розетку, но не имея общего представления, о том как это сделать, не очень хочется за это дело браться. Вам
поможет подробно изложенная в этой статье схема подключения розетки.
Приведем наглядный пример, в нем рассмотрим полный вариант монтажа и соединения жил проводов в схему розетки с заземлением. Наш пример выполнен в компактном варианте, это скрытая электропроводка и обычно все что вы видите находится под штукатуркой и на удаленном друг от друга расстоянии. Схема наружной электропроводки и в внутренней одинаковы.
Монтаж предустановочных элементов схемы
Первым делом, необходимо установить распределительную коробку, в ней будут происходить соединения жил проводов в готовую схему.
Далее, проведем имитацию силового щита с установленными в нем устройствами защиты. Так как у нас одно направление, то и автомат установим один. Монтируем Din — рейку, на ней мы закрепим модульный автоматический выключатель, который будет выполнять защиту цепи от короткого замыкания.
Теперь, устанавливаем подрозетник, в него в последующем будет установлен механизм розетки.
При необходимости, вы можете детально ознакомиться с пошаговыми инструкциями по монтажу, они представлены на нашем ресурсе в одноименных статьях, монтаж подрозетнков по бетону и по гипсокартону.
Прокладываем провода необходимые для выполнения схемы
Первым делом, монтируем силовой провод, по которому будет подходить напряжение к устройству защиты цепи.
Внимание! Если провод уже имеется и на нем присутствует напряжение, обязательно перед проведением всех работ отключите его. После чего, в обязательном порядке, убедитесь в его отсутствии на проводе. Для контрольной проверки факта его отсутствия воспользуйтесь индикатором напряжения. Ознакомиться с инструкцией по работе с данным прибором можно в статье индикаторы напряжения.
Далее, монтируем провод питающий распределительную коробку, он будет прокладывается от устройства защиты до коробки.
Теперь, проводим и крепим последний провод нашей схемы, от распределительной коробки до подрозетника.
Концы проводов в распределительной коробке должны иметь длину 10-15 сантиметров.
На подрозетнике для подключения розетки хватит 10 сантиметров.
Все необходимые провода схемы смонтированы, переходим к монтажу установочного оборудования.
Монтаж установочного оборудования схемы розетки
Начнем с установки и подключения устройства защиты. В нашем примере эту функцию выполняет двухполюсный автоматический выключатель, он защищает цепь от возникновения перегрузок и токов короткого замыкания. Более подробно узнать о том, что представляют из себя автоматические выключатели, какие функции выполняют и каков их принцип действия можно в статье бытовые автоматические выключатели. Изучить детальную инструкцию по подключение двухполюсного автомата можно в статье как подключить двухполюсный автоматический выключатель.
Подготавливаем подходящие и отходящие провода. Применяемый нами провод трехжильный, имеет двойную изоляцию, которая состоит из общей наружной оболочки и внутренней, индивидуальной для каждой из жил, с цветовым обозначением изоляционного слоя .
Снимаем наружную изоляцию. Пред нами три разноцветные жилы сверху и три снизу. У разных кабельных заводов окраска жил может несколько меняться, но основные цвета и оттенки остаются неизменными. В каждом трехжильном проводе присутствует синий оттенок и желтый или желто-зеленый.
Перед тем, как выполнить монтаж схемы необходимо определиться с расцветкой жил. Давайте посмотрим, какие цвета наиболее широко применяются в электрике для обозначений:
- синий — ноль;
- желтый или желтый с зеленой полосой — земля.
- Жила оставшегося цвета будет фазой, в большинстве случаев ее окраска бывает белой или черной, реже красной, оранжевой или коричневой.
Для конкретно нашего примера, на подходящем к автомату (верхнем) проводе:
- белый провод с синей полосой — будет нулевым;
- белый провод с черной полосой — фазным;
- желтый с зеленой полосой — земля.
На отходящем (нижнем) проводе:
- синий — ноль;
- белый — фаза;
- желтый с зеленой полосой — земля.
Желательно использовать провод одного кабельного завода, так вы гарантированно не запутайтесь в расцветке.
Отмеряем необходимую для подключения длину жил провода. Затем, снимаем по 1 сантиметру изоляционного слоя с каждой из жил.
Подключаем синюю и белую жилы к контактам автомата.
Для заземляющей жилы используем проходной контакт.
Аналогичным образом подключаются и нижние жилы, отходящего на распределительную коробку провода. Отмечу, что подключение жил должно быть симметрично, если сверху автомата ноль справа, то и снизу он должен быть справа, фаза сверху слева и снизу слева.
Подключение устройства защиты завершено.
Переходим к подключению розетки с заземлением. Снимаем наружную изоляцию провода.
Далее, снимаем по 1 сантиметру изоляционного слоя с каждой жилы.
Подключаем жилы проводов к контактам механизма розетки. Белая и синяя жилы подсоединяются в силовые контакты розетки, а желтую жилу с зеленой полосой сажаем в контакт заземления.
Подключение розетки с заземлением выполнено. Теперь, устанавливаем механизм розетки в подрозетник.
Подробнее о том как выполнить установку других элементов электропроводки (розеток с заземлением и без, двойных выключателей, в том числе и с подсветкой, люстры, светильника, вытяжного вентилятора ванной комнаты), вы можете посмотреть здесь.
Переходим к следующему этапу.
Соединяем жилы проводов в схему подключения розетки
В нашей схеме участвуют два провода, питающий распределительную коробку (расположен слева) и отходящий на розетку (расположен снизу), снимаем с обоих проводов наружную изоляцию.
Далее, снимаем по 3,5-4 сантиметра изоляционного слоя с каждой жилы.
Соединение жил в схему будем производить методом скрутки проводов между собой.
На данном этапе хочу обратить ваше внимание на один важный момент. В примере используется метод скрутки, так как он является наиболее наглядным для понимания и восприятия принципа выполнения схемы. В настоящее время правилами устройства электроустановок в чистом виде этот метод запрещен ПУЭ п2.1.21.
К разрешенным методам соединения жил проводов относятся:
- опрессовка;
- сварка;
- пайка;
- винтовые, зажимные и тому подобные сжимы.
Более подробно данный вопрос будет разобран в соответствующей инструкции, в настоящее время статья находиться в написании, но уже в ближайшее время появится на нашем ресурсе.
Скручиваем между собой сначала две белые, фазные жилы провода.
Протягиваем готовую скрутку плоскогубцами, торчащие концы откусываем.
Аналогичным образом соединяем две синих, нулевых жилы провода.
Затем, две жилы заземления.
Схема подключения розетки завершена.
Устанавливаем защитную крышку на механизм розетки.
Изолируем скрутки проводов с помощью изоляционной ленты.
И укладываем их в распределительную коробку.
Теперь, нам необходимо проверить работоспособность готовой схемы. Для этого, подаем на нее напряжение, переведя рычажок автоматического выключателя из нижнего положение — «выключено», в верхнее положение — «включено».
Проверку выполняем сначала указателем напряжения, затем, используя любой электроприбор, просто включив его в розетку.
Розетка готова к эксплуатации.
Рисунок. Схема подключения розетки.
QMetaObject :: Connection | connect (const QObject * sender , const char * signal , const QObject * Receiver , const char * method , Qt :: ConnectionType тип = Qt :: AutoConnection) |
QMetaObject :: Connection | connect (const QObject * отправитель , const QMetaMethod и сигнал , const QObject * приемник 9, const QM метод 9et QM , Qt :: ConnectionType type = Qt :: AutoConnection) |
QMetaObject :: Connection | connect (const QObject * отправитель , PointerToMemberFunction приемник сигнала , метод PointerToMemberFunction приемник QObject109000, const QObject109 * 9000 , Qt :: ConnectionType type = Qt :: AutoConnection) |
QMetaObject :: Connection | connect ct (const QObject * sender , PointerToMemberFunction signal , Functor functor ) |
QMetaObject :: Connection | connect (const QObject * sender sender , signal context , Functor , functor , Qt :: ConnectionType type = Qt :: AutoConnection) |
bool | disable (const QObject * sender , const char * signal , const QObject * приемник , const char * метод ) |
bool | отключение (const QObject * отправитель , const QMetaMethod & signal , const QObject * Receiver , const QMetaMethod & 000 метод) |
bool | отключить (const QMetaObject :: Connection & connection ) 9 0005 |
bool | отключить (const QObject * отправитель , PointerToMemberFunction signal , const QObject * Receiver , PointerToMemberFunction method , PointerToMemberFunction method |
tr (const char * sourceText , const char * disambiguation = nullptr, int n = -1) |
Как пройти через внутреннюю таблицу?
привет,
TT_MY_PARA это нестандартная таблица.
Итак, в нем нет полей.
, если вы указали как «MY_PARA type TT_MY_PARA of interface IF_PDL_APP»
У
is my_para есть только рабочая область без тела.
, если вам нужно внутреннее тело таблицы, вы можете определить его как «таблица типов».
без знания полей нет смысла в цикле ..
сначала необходимо знать поля во внутренней таблице, а затем выполнить печать / изменение этих значений…
например:
вида: начало ты_мара,
тип матнр,
ersda типа ersda,
………
конец ты_мара.
данные: таблица типов it_mara для ty_mara.
«для создания внутреннего тела стола
данные: wa_mara типа ty_mara.
«для создания рабочей области.
выберите matnr ersda …. в таблицу it_mara from mara где <...>.
«select загружает данные из mara во внутреннюю таблицу u’r.
цикл it_mara в wa_mara.
«здесь одна запись перемещается из тела в рабочую область.
напишите: / wa_mara-matnr, wa_mara-ersda ,……
«здесь печатаем данные в рабочей области.
endloop.
регара,
чанду.
Работа с блокировкой розеток и обходное решение
Процесс — это отдельный экземпляр исполняемой программы, запущенной на компьютере.
Операционная система может запускать несколько экземпляров одной и той же программы,
это означает, что выполняется несколько процессов, по одному для каждого экземпляра программы.Операционная система контролирует запуск каждого процесса и его статус.
Один процесс может создать другой процесс, и существуют механизмы, с помощью которых процессы могут взаимодействовать друг с другом;
это называется межпроцессным взаимодействием (IPC) и довольно хорошо известно в UNIX и менее известно в Windows.
И фактические методы и вызовы функций для создания процессов, управления и IPC выполняются иначе.
в разных операционных системах.
В UNIX создание процесса чаще всего выполняется путем объединения двух вызовов функций:
-
fork
создает новый процесс, который является точной копией, клоном процесса, который его вызвал.Процесс, которыйфорк
s является родительским процессом, а клон — дочерним процессом,
и оба получают идентификаторы процессов (PID) друг друга, которые они будут использовать для связи и управления. -
exec *
заменяет текущий процесс другим процессом.
Звездочка (*) указывает, что это семейство функций, имена которых имеют разные окончания и различаются тем, как они создают список аргументов для передачи аргументов командной строки новому загружаемому процессу.Для получения подробной информации вам нужно будет прочитать документацию по exec * (например, Google на странице руководства exec ).
Это используется таким образом, что сразу после вилки
существует оператор if, который разделяет код для запуска дочернего и родительского процессов (поскольку дочерний процесс является идеальным клоном родительского процесса, они оба используют возвращаемое значение Вилка вызов
, чтобы определить, являются ли они родителями или детьми, как точки под веком клона в Шварценеггера Арнольда Шварценеггера ).Потомок вызывает exec *
, чтобы заменить себя фактической программой, которую родитель хотел запустить.
Но перед тем, как вызвать замену, дочерний элемент обычно выполняет некоторые задачи по настройке связи между родительскими и дочерними элементами, обычно с помощью каналов (см. Ниже).
Кроме того, любой процесс может разветвляться на
и создавать практически любое количество дочерних процессов.
(есть реальные ограничения, накладываемые мощностью операционной системы, но концептуально ограничений нет).
А дочерние процессы могут разветвлять
и создавать свои собственные дочерние процессы.Фактически, все процессы, запущенные в UNIX и Linux, являются дочерними, какими бы поколениями они ни были удалены.
Процесс 1, init
— как сообщается, в некоторых версиях Linux init
был заменен другим процессом 1, таким как Upstart
.
Чтобы проиллюстрировать, как быстро множество процессов может быть выполнено fork
ed, общая проблема при написании ваших первых экспериментов с вилкой
ing заключается в том, что дочерние процессы продолжают fork
ing, когда они не должны этого делать, создавая таким образом серию процессы, которых вы даже не ожидали.В зависимости от обстоятельств и от того, происходит ли это с вами или с кем-то еще, это может быть очень неприятно или довольно забавно.
UNIX управляет группами процессов , через которые он связывает дочерние процессы с их родительскими.
Когда родительский процесс завершается, операционная система также завершает все свои дочерние процессы.
Следовательно, при написании родительского процесса вам нужно, чтобы он дождался завершения всех его дочерних процессов, прежде чем
оно может прекратиться само.Это поддерживается системными сигналами и функциями, такими как SIGCHLD
и wait ()
и waitpid ()
.
IPC под UNIX широко поддерживается и широко известен.
Обычный метод для родителя — создать пару каналов, которые потомок присоединяет к своим стандартным файлам ввода и вывода (stdin и stdout — если вы программист на C, то вы должны знать об этом уже), прежде чем он вызовет exec *
.
Другие методы включают именованные каналы, очереди сообщений, общую память и сокеты домена UNIX.Эти методы и способы их использования очень хорошо документированы и широко используются программистами UNIX и Linux.
Во многих случаях возможность заниматься таким программированием — это то, что в первую очередь привлекло программиста в Linux.
Этот метод широко используется при программировании сокетов под UNIX.
Многие коммерческие серверы используют его для обработки нескольких клиентов и многих книг по сетевому программированию на основе UNIX.
посвятите целые главы обсуждению различных проблем проектирования с разветвленными серверами .
Должен признать, что у меня нет практического опыта управления процессами под Windows.
Я сообщу о том, что почерпнул из чтения, и надеюсь, что то, что я здесь говорю, верно.
Windows (то есть Win32), с другой стороны, не поддерживает вилку , вилку
или что-либо подобное.
Вместо этого у него есть функция CreateProcess
, которая напрямую создает новый процесс на основе программы, названной в вызове функции, в основном объединяя fork
и exec *
в одном вызове функции.После этого, боюсь, мне станет довольно туманно.
Я знаю, что процесс может получить дескриптор другого процесса (эквивалент PID в UNIX),
но я не уверен, как и что все это может с этим сделать.
В Windows также нет ничего подобного группам процессов или фактических родительско-дочерних отношений между
процесс и процессы, которые он создает.
Скорее, «родитель» должен установить эту роль.
Сигнала SIGCHLD
нет, но есть две функции: WaitForSingleObject
и WaitForMultipleObjects
, которые используются для ожидания
«дочерние» процессы для завершения, а также для других видов событий.Например, они также позже используются в многопоточности для синхронизации потоков при использовании общих ресурсов.
(намек на грядущие кошмары).
Я также не очень хорошо знаю IPC под Windows.
Я видел упоминания об анонимных каналах, именованных каналах и почтовых ящиках, но не играл с ними.
По сравнению с UNIX эта область малоизвестна.
Я видел всего несколько книг по этой теме.
Насколько мне известно, при написании серверов Windows создание процесса не используется.Я считаю, что многопоточность здесь является предпочтительным методом.
Несмотря на различия в операционных системах, есть несколько общих концепций.
Когда процесс запускается, ему даются необходимые ресурсы.
В основном это область памяти и окружающей среды.
Как правило, только этот процесс может получить доступ к собственному пространству памяти;
он не может получить доступ к пространству памяти другого процесса, и ни один процесс не может получить доступ к его пространству памяти.
Это затрудняет совместное использование данных несколькими процессами.Вот почему IPC становится важным.
В то же время разные процессы работают асинхронно, то есть они выполняются независимо от других процессов, так что ни один процесс не может знать, где находится другой процесс в своем исполнении; т. е. он не может знать, что именно другой процесс делает в данный момент.
Когда два процесса пытаются получить доступ к одному и тому же ресурсу, например разделяемой памяти (механизм IPC в UNIX), им необходимо координировать свои действия.Это называется синхронизация , и это становится действительно важным, когда мы переходим к многопоточности.
Большинство из этих проблем также возникает при многопоточности, за исключением того, что разные потоки смогут получить доступ к одной и той же глобальной памяти в рамках своего общего процесса.
Что значительно упрощает дело, но также значительно усложняет ситуацию.
Одна из проблем, связанных с созданием дополнительных процессов, заключается в том, что это истощает операционную систему.Для создания процесса и его уничтожения требуется много работы, к тому же каждый процесс получает ресурсы (например, память, среду, файлы) для своих собственных, а ресурсов для обхода ограничено.
Когда сервер занят созданием, запуском и очисткой после сотен процессов, это может действительно замедлить работу этого сервера.
В результате было проведено множество исследований, направленных на повышение эффективности этого процесса.
Например, есть предварительный форк, при котором большой пул процессов создается при запуске и никогда не закрывается;
им просто выделяется для обработки нового соединения, и после закрытия этой коллекции они возвращаются в пул и ждут обработки следующего соединения.
Другим решением была разработка потоков, первоначально известных как «легковесные процессы», при этом традиционные процессы считались «тяжелыми» из-за того, что им требуется поддержка ОС.
Они вроде как подпроцессы; процессы внутри процесса.
Они легкие, потому что меньше участвуют в их создании и запуске, плюс все потоки в рамках процесса совместно используют память этого процесса, что снижает потребность системы в ресурсах.
Хорошо, а почему «темы»?
Что ж, все мы знаем, что компьютеры выполняют программы по одной инструкции за раз, выстраивая их одну за другой, как будто в потоке.Назовем это «потоком исполнения».
Идея многопоточности состоит в том, чтобы позволить процессу иметь нескольких потоков выполнения .
Это почти похоже на многозадачность , за исключением того факта, что все эти несколько потоков выполняются в одном и том же процессе .
Это означает, что пространство памяти, принадлежащее процессу , доступно для всех потоков в этом процессе .
Внезапно жизнь стала намного проще и намного сложнее одновременно.Гораздо проще обмениваться данными и ресурсами, но гораздо труднее не дать этим потокам наступить друг другу на пятки и повредить эти общие ресурсы.
Более свободный доступ требует более строгой дисциплины со стороны программиста.
Помните, я сказал, что это требует навыков и опыта программиста?
Вы должны знать, что делаете: с большой свободой приходит большая ответственность.
Из того, что я читал, потоки начинались в UNIX как «легковесные процессы».В POSIX UNIX это превратилось в библиотеку под названием «pthreads», которая обычно используется в UNIX и Linux.
Он даже был перенесен на 32-битную Windows (Win32) в пакете под названием
«pthreads-win32».
В Windows другая история. MS-DOS определенно была однопоточной операционной системой.
16-битные версии Windows от 1.0 до 3.11 (AKA «Win16») просто работали поверх MS-DOS.
Win16 работает по принципу
кооперативная многозадачность, что означало, что вы могли переключаться между задачами Windows только в том случае, если
текущая задача уступила контроль другой задаче, а это означало, что программисты должны быть дисциплинированы
в том, как они писали свои приложения, чтобы никакая часть их приложения не работала слишком долго и блокировала все другие приложения, включая Windows.Win16 не поддерживает многопоточность.
Одной из главных особенностей OS / 2, разработанной Microsoft для IBM примерно в 1987 г., было то, что она поддерживала
вытесняющая многозадачность.
Насколько я понимаю, Windows NT также поддерживала его.
UNIX всегда использовал его.
При вытеснительной многозадачности всем процессам дается интервал времени , очень короткий интервал времени для выполнения,
и все процессы запускаются по очереди, и их временной интервал истекает, ОС прерывает процесс и передает управление следующему процессу, и так далее, так что у каждого процесса есть шанс запустить.Так продолжалось до тех пор, пока Windows не перешла на 32-разрядную версию Windows 95, в результате чего эта и последующие версии стали называться Win32,
что основные продукты Windows могут работать на
вытесняющая многозадачность.
Это также позволило Win32 dows (Win32, начиная с Windows 95) наконец-то поддерживать многопоточность.
Как и следовало ожидать, Windows и UNIX по-разному выполняют многопоточность.
Однако, несмотря на внешние различия, концепции одинаковы, и они выполняют много одинаковых функций.Кроме того, существуют те же внутренние проблемы, которые решаются очень похожими способами.
И в Windows, и в UNIX вы пишете сам поток как функцию, формат заголовка функции которой предопределен.
Вы запускаете поток, передавая его имя (которое в C является его адресом) системной функции: pthread_create
в UNIX и CreateThread
в Windows.
В Windows вы также можете использовать beginthreadex
; на самом деле, это рекомендуется
Джонсон М.Харт в книге Win32 System Programming (2-е изд., Addison-Wesley, 2001, стр. 214), где он советует:
Не используйте CreateThread; вместо этого используйте специальную функцию C, _beginthreadex, чтобы запустить поток и создать специфичное для потока рабочее хранилище для LIBCMT.LIB. Используйте _endthreadex вместо ExitThread для завершения потока. Примечание: Существует функция _beginthread, предназначенная для упрощения использования, , но ее следует избегать.
И в Windows, и в UNIX функция потока принимает единственный аргумент — указатель void
.
Функция создания потока передает указатель на данные, передаваемые потоку.
Поток получает этот указатель данных как единственный аргумент.
Изящный трюк, который вы можете использовать с этим указателем, — это определить структуру, которую вы заполняете всеми разными типами данных, а затем передавать все эти данные в поток через один указатель.И, конечно же, поскольку вы написали поток, поток знает объявление структуры и, следовательно, знает, как получить доступ ко всем этим данным.
Закрытие потока — самая простая часть: просто дойдите до конца функции потока.
Кроме того, существует ряд функций для управления потоками и получения их статуса.
Хорошо, теперь пришла проблема.
Так же, как каждый вызов функции имеет свой собственный блок памяти в стеке для своих локальных переменных и т. Д.,
каждый поток имеет собственное «локальное хранилище потока» (TLS).В то же время, как и любая другая функция, поток имеет прямой доступ к глобальной памяти программы.
Таким образом, вместо того, чтобы выполнять какую-то экзотическую процедуру IPC, потоки могут связываться друг с другом через глобальные переменные.
Очень просто, очень прямо.
Очень опасно.
Вот две основные проблемы, которые могут возникнуть, обе основаны на том же базовом факте, что потоков работают асинхронно :
- Рассмотрим ситуацию, когда одному потоку требуется значение, предоставленное другим потоком.Второй поток сохраняет результат своих вычислений в глобальной переменной, которую читает первый поток.
Итак, как первый поток узнает, действительно ли значение в этой глобальной переменной?
Первый поток не знает, когда второй поток завершил свою задачу. - Эта проблема также основана на том факте, что поток может быть прерван в любой момент.
На в любое время .
Вот сценарий, иллюстрирующий проблему.
Один поток читает из глобальной переменной, чтобы использовать значение, записанное в него другим потоком.Допустим, это int.
В 32-битных системах длина int составляет четыре байта; в 16-битных системах они состоят из двух байтов, но кто из них больше запускает?
Но в любом случае это может произойти: в середине обновления многобайтового значения поток прерывается, и другой поток читает это значение.
Другой поток прочитал фиктивное значение.
Помните, что, несмотря на всю эту многозадачность и многопоточность, пока все это работает на одном аппаратном процессоре, компьютер может выполнять только одну инструкцию за раз.Два разных потока не работают одновременно. Они не могут работать в системе только с одним аппаратным процессором.
Вместо этого каждому потоку дается ограниченное количество времени для выполнения, после чего он прерывается прямо в середине того, что он делает, чтобы управление передалось другому потоку,
вытесняющая многозадачность.
Это даже так на двух- или четырехъядерном компьютере с 2 или 4 процессорами.
Ваше программное обеспечение должно быть либо специально написано, либо достаточно умным, чтобы использовать дополнительные процессоры,
и большинство программ — ни то, ни другое.Операционная система должна быть достаточно интеллектуальной, но вытеснение по-прежнему будет использоваться при выполнении большей части вашего кода.
В этом суть проблемы.
В коде есть некоторые разделы кода, называемые критическими разделами , (ключевое слово предупреждение!), Где операция не может быть прервана, пока она не будет завершена.
Как запись многобайтового значения.
Или обновление буфера данных.
Здесь в игру вступает синхронизация .
Эти проблемы называются «условиями гонки», потому что разные потоки конкурируют друг с другом за использование одних и тех же ресурсов, эффективно «гоняя» друг друга.
Мы не хотим, чтобы они соревновались друг с другом; мы хотим, чтобы они синхронизировались друг с другом.
Может не синхронизировать все по времени, но хотя бы в критические моменты. В критических секциях .
Таким образом, решение для условий гонки называется «синхронизация , » (еще одно ключевое слово — предупреждение!).И, опять же, хотя детали будут различаться для разных операционных систем и языков, многие концепции и инструменты во многом одинаковы:
- Контроль резьбы.
Данный поток может быть приостановлен (т. Е. Не запущен) до тех пор, пока не возникнут условия для его возобновления.
Например, в нашей первой задаче поток должен ждать, пока второй поток не выполнит вычисление, поэтому первый поток будет приостановлен, а затем возобновится, когда второй поток завершит свою задачу.В pthreads это делается с помощью функцииpthread_join
. - Семафор может использоваться для подсчета количества потоков, использующих конкретный ресурс — обычно это число всего один.
Только когда это число меньше заданного значения, новому потоку будет разрешен доступ к нему.
И UNIX, и Windows поддерживают семафоры.Windows использует тип данных
CRITICAL_SECTION
для реализации семафоров.
После объявления и инициализацииCRITICAL_SECTION
поток может затем сигнализировать, что он входит в этот критический раздел и покидает этот критический раздел.Пока один поток находится в критической секции, все остальные потоки заблокированы и будут блокировать до тех пор, пока поток в критической секции не сообщит, что он уходит, после чего следующий поток может войти и т. Д. - Чаще всего требуется, чтобы поток имел взаимоисключающих доступа к ресурсу, блокируя все остальные потоки до тех пор, пока это не будет выполнено.
Это делается с помощью мьютекса (очевидно, это сокращение от «взаимоисключающие»).
И UNIX, и Windows поддерживают мьютексы, хотя и по-разному.Кроме того, в Windows мьютекс может применяться к нескольким процессам, тогда какCRITICAL_SECTION
применяет только в пределах одного процесса.Основная процедура состоит в том, чтобы создать переменную мьютекса для каждого разделяемого ресурса, а затем окружить весь код, который обращается к этому ресурсу, вызовами мьютекса.
Прежде чем поток попытается получить доступ к общему ресурсу, он блокирует мьютекс, который запрещает доступ любому другому потоку. И после того, как он закончит с этим ресурсом, он разблокирует мьютекс, что позволит получить доступ к другим потокам.Когда поток пытается заблокировать мьютекс, а он уже заблокирован, этот поток будет приостановлен до тех пор, пока другой поток не разблокирует мьютекс, после чего блокировка первого потока будет успешной, а затем этот поток обращается к ресурсу и разблокирует мьютекс.
Оба мьютекса и CRITICAL_SECTION
имеют одни и те же проблемы:
- Они основаны на системе чести.
Мьютекс или семафор блокирует доступ потока , только если поток проходит через мьютекс / семафор ;
если поток полностью обходит мьютекс / семафор, то его ничто не может остановить.Следовательно, у программиста должна быть дисциплина для написания всего кода, который обращается к общему ресурсу, чтобы он выполнял необходимые вызовы мьютексов / семафоров.
Любой код, нарушающий эту дисциплину, сводит на нет цель синхронизации. - Программист должен написать код критического раздела, чтобы избежать
тупик (еще одно предупреждение по ключевому слову!).
Это условие, при котором два потока или процесса заблокировали ресурсы, которые нужны друг другу и которые должны ждать.Поскольку ни один поток не может освободить свои ресурсы, пока другой не освободит их, они застряли там, и это приложение теперь мертвое в воде.
Конечно, когда вы изучите конкретную многопоточную систему, вы изучите методы этой системы для синхронизации.
А в некоторых системах методов даже больше, чем я здесь упомянул.
Применение многопоточности к сетевым приложениям:
Хорошо, теперь мы можем спросить, как применить многозадачность или многопоточность к сетевым приложениям.Давайте начнем с обзора, с чего мы начали этот долгий путь.
В программе с одним потоком выполнения (нормальная ситуация) блокирующий сокет приводит к внезапной остановке всей программы до тех пор, пока она не получит данные для чтения.
Нам нужно, чтобы программа могла продолжать работу, ожидая прибытия этих данных.
Нам нужно иметь возможность реагировать на ввод пользователя с клавиатуры, получать данные из других сокетов и делать все, что еще необходимо (например, обновлять отображение времени на мониторе).Это особенно необходимо для сервера, который может одновременно обрабатывать несколько клиентов, а также проверять наличие новых клиентов, пытающихся подключиться.
Блокировка каким-либо одним сокетом для такого сервера была бы катастрофой.
Основная стратегия использования многопоточности при разработке такого приложения состоит в том, что вы предоставляете каждому сокету свой собственный поток выполнения; если сокет блокирует этот поток, это не вызывает проблем, потому что ни один из других потоков не будет затронут.
Многопоточный сервер:
Среди моих образцов серверов я разработал версию своего мультиклиентского tcp-сервера, echomtd
, который использует многопоточность под Windows. Я опишу это в следующем обсуждении, чтобы проиллюстрировать общие идеи дизайна:
- Когда программа запускается, она выполняет основной поток.
Насколько я понимаю, это поток, который должен запускать ваш пользовательский интерфейс и выполнять пользовательский ввод-вывод.Насколько я понимаю, именно здесь должен выполняться цикл Windows WinMain.
Затем этот основной поток создает «рабочие потоки», которые выполняют работу, не связанную с пользовательским интерфейсом.
По сути, просто напишите пользовательский интерфейс, как обычно.Базовая схема основного потока — это инициализация приложения на основе аргументов командной строки и / или файла конфигурации с последующим созданием одного или нескольких рабочих потоков, некоторые из которых могут создавать больше рабочих потоков.Затем основной поток переходит в цикл, в котором он обрабатывает ввод-вывод пользователя и, возможно, взаимодействует с некоторыми рабочими потоками.
В
echomtd
основной поток считывает аргумент командной строки, который является используемым эхо-портом. Затем он выполняет обычную инициализацию Winsock и инициализирует переменныеCRITICAL_SECTION
для доступа к списку клиентов и очереди выходной строки.
Затем он создает прослушивающий сокет сервера и запускает AcceptThread, передавая ему прослушивающий сокет.Наконец, основной поток переходит в свой пользовательский цикл ввода-вывода, в котором он ищет ввод с клавиатуры и проверяет выводимые строки для отображения.Две возможные альтернативы:
- Пусть AcceptThread создаст свой собственный поток прослушивания и, возможно, также выполнит всю настройку и инициализацию Winsock.
- Для крупного проекта попросите основной поток создать ManagerThread, который будет создавать и управлять иерархией потоков, которая формирует всю внутреннюю часть приложения, оставляя основному потоку ничего не делать, кроме запуска пользовательского интерфейса и связи с ManagerThread.Затем пользователь может ввести команду, и основной поток отправит команду в ManagerThread, который выполнит ее и отправит результаты обратно в основной поток для отображения пользователю.
Имейте в виду, что идея ManagerThread амбициозна, но имеет смысл для большого и крупного проекта.
Большая часть его сложности может быть делегирована рабочим потокам, работающим под ним; например, ThreadManager и ApplicationManager.
- В простых проектах этот первый поток, созданный основным потоком, будет просто AcceptThread, который будет блокироваться при вызове
accept
, а затем, получив входящее соединение, будет создавать новый поток для обработки новый клиент.Именно такой подход я применил в
echomtd
. Когда AcceptThread принимает новое соединение, он добавляет новый клиентский сокет в список клиентов, а затем запускает новый ClientThread и передает ему новый клиентский сокет.
Затем он возвращается к блоку на, принимает
. - Идея ClientThread заключается в том, что у нас может быть несколько из них одновременно, каждый из которых запускает эхо-сеанс со своим собственным клиентом.
Затем, когда клиент отключается, поток выполняет плавное завершение работы и закрытие, завершая себя.Опять же, так это делается в
echomtd
.
Кроме того, поток сообщает о том, что происходит, отправляя выходные строки в очередь выходных строк, критическую секцию, к которой все потоки будут пытаться получить доступ, так что основной поток может фактически вывести их. - Когда серверу дана команда на выключение, ему необходимо будет выполнить следующие операции (хотя точные детали могут сильно отличаться):
- Сообщите AcceptThread о прекращении приема новых клиентов, после чего он закроет свой прослушивающий сокет.
- Сообщите каждому потоку ClientThread о завершении сеанса, после чего он завершит свое соединение, закроет свой сокет и, наконец, закроется.
- Когда все ClientThreads закрыты, AcceptThread сообщит об этом факте основному потоку, а затем закроется.
- Наконец, основной поток может выйти, завершив приложение.
К сожалению,
echomtd
ничего из этого не делает, а просто выходит.
В основном проблема заключается в том, что ни один из потоков не может ответить на команду завершения работы, потому что все они заблокированы.Мы можем приказать главному потоку завершить потоки, но это не будет корректным завершением работы.Единственное решение, которое приходит мне в голову в данный момент, — это комбинировать техники; например, сделать сокеты потоков неблокирующими —
select
может быть вариантом, но поскольку мы имеем дело только с одним сокетом на поток,select
будет немного излишним, но все равно будет вариантом, если поток имеет дело с более чем одним сокетом.
Таким образом, потоки смогут периодически вытаскивать свои головы из своих сокетов и проверять входящую команду (например, через глобальную переменную, охраняемую CRITICAL_SECTION), с которой им нужно будет действовать.Это также не обязательно противоречит цели многопоточности, поскольку многопоточность может принести пользу иным образом; все зависит от ваших потребностей и от вашего дизайна.
Многопоточный клиент:
В моих примерах эхо не требовалось ничего, кроме простого эхо-клиента. Я действительно не мог придумать значимого способа добавить к нему многопоточность.
Но существует множество возможных проектов, в которых мы хотели бы, чтобы клиент оставался свободным для выполнения множества задач в дополнение к связи с сервером.
Давайте рассмотрим, как мы можем использовать многопоточность при разработке игрового клиента.
В качестве примера предположим, что каждый игрок будет запускать свою собственную копию клиента и подключаться к серверу через TCP. Помимо прочего, сервер будет поддерживать состояние игры, включая состояние всех игроков и их расположение в игровом пространстве.
Игроки также могут напрямую общаться с другими игроками, индивидуально, для небольшой группы или транслируя для всех, через дейтаграммы UDP,
хотя некоторые формы взаимодействия между игроками, влияющие на состояние игры, должны быть либо маршрутизированы через сервер, либо сообщены серверу постфактум.Кроме того, клиент может использовать дейтаграммы UDP для периодической передачи определенной информации серверу, такой как «контрольное сообщение», которое указывает, что клиент все еще работает и подключен;
TCP - это надежный протокол, который, как предполагается, может поддерживать соединение, несмотря на кратковременные отключения, что означает, что может быть трудно определить, когда соединение фактически потеряно (например, сетевой кабель клиентского компьютера отключен, клиент внезапно выходит из строя) .
Другой вариант - позаимствовать идею у FTP и установить два TCP-соединения с сервером, одно для команд, а другое для передачи данных.Дело в том, что у клиента может быть несколько сокетов для управления.
У клиента также будет много разных задач; например (ни в коем случае не исчерпывающе):
- Пользовательский интерфейс для приема и обработки команд и отображения ответов.
- Обновление знаний клиента о состоянии игры и игровом пространстве.
- Обновление графического дисплея в режиме реального времени для отражения обновления знаний клиента о состоянии игры и пространстве.
- Связь с сервером.
- Связь с другими игроками.
Конечно, окончательный проект определит гораздо больше функций, которым все должны работать без препятствий со стороны других.
Многопоточность хорошо послужит дизайну, разделит потоки, каждый из которых выполняет свои индивидуальные функции, и
обмен информацией друг с другом через глобальные переменные и флаги, чтобы сигнализировать, когда определенные данные были обновлены.
Конечно, синхронизация всего этого была бы сложной задачей, но это все часть обучения работе с многопоточностью.
Конструкции многопоточного / многопроцессорного сервера
Повторяя работу моего простого многопоточного сервера echomtd
в качестве типичного примера:
- Основной поток инициализирует сервер, а затем создает и запускает AcceptThread.
- AcceptThread обрабатывает поток прослушивания.
Когда клиент подключается, он принимает соединение, создает новый клиентский сокет для этого клиента и создает новый ClientThread для обслуживания этого клиента через его клиентский сокет.Для каждого клиента будет по одному ClientThread. - ClientThread ожидает, пока клиент отправит ему запрос, который он обслуживает (в эхо-службе, это означает, что он отображает строку запроса обратно клиенту), а затем возвращается к ожиданию запроса от клиента.
Когда клиент закрывает соединение, ClientThread выполняет свою часть выключения, закрывает сокет и завершает работу.
Простой многопроцессорный сервер будет работать аналогичным образом, только вместо того, чтобы создавать поток для каждого клиента, он будет создавать процесс, который будет использовать некоторую технику межпроцессного взаимодействия (IPC) для связи со своим родителем и с другими процессами на сервере.Опять же, это, скорее всего, будет сделано в UNIX / Linux, поэтому, скорее всего, будут использоваться форк ,
/ exec
* и каналы.
Хотя эти простые серверы могут удовлетворительно работать при легких и умеренных нагрузках, реальные и коммерческие приложения могут легко перегрузить их.
Существуют накладные расходы при создании и уничтожении потоков и гораздо больше накладных расходов при создании и уничтожении процессов. И даже некоторые накладные расходы на создание и закрытие сокетов.Поэтому были разработаны различные подходы к проектированию для решения этих проблем и ускорения ответа сервера при одновременном снижении рабочей нагрузки на систему.
Некоторые из этих подходов к проектированию рассматриваются в книге Линкольна Штайна «Сетевое программирование с помощью Perl » (Addison-Wesley, 2001).
Следующие ниже обсуждения основаны главным образом на его примерах из этого источника.
Предварительная развилка и предварительная заправка
Один из способов избежать загрузки сервера путем создания новых процессов и потоков на лету - создать их все при запуске сервера.Это называется либо preforking , либо prethreading , в зависимости от того, используете ли вы многозадачность или многопоточность.
Основная идея состоит в том, чтобы создать при запуске пул потоков или процессов, из которых вы рисуете для обработки нового клиента и обратно, к которому вы возвращаете потоки и процессы, от которых клиенты отключились.
Таким образом, вы продолжаете повторно использовать потоки и процессы вместо того, чтобы постоянно создавать новые и уничтожать их.
В презентации Стейна сначала рассматриваются простые предварительные форкинг и предварительная потоковая передача на примере веб-сервера, а затем обсуждаются их проблемы и предлагается улучшенный «адаптивный» метод.Его подход включал в себя много анализа, который вы можете прочитать в его книге; Я просто сделаю краткую презентацию, чтобы вы получили общее представление.
Кроме того, общие подходы, проблемы и решения для разветвления и потоковой передачи очень похожи; В основном различаются только конкретные техники:
-
- Простая вилка («Принятие и вилка»):
-
Простой базовый сервер разветвления большую часть времени блокирует на
и принимает
.Когда приходит новое соединение, оно порождает нового потомка черезfork
иexec
, чтобы обработать это новое соединение, и возвращается к блокировке наaccept
.
Дочерний элемент существует достаточно долго, чтобы обслуживать клиента, а затем прекращает работу, когда клиент отключается.Хотя это работает достаточно хорошо при малых и средних нагрузках, он не может справиться с повышенным спросом на новые входящие соединения.
Поскольку пример приложения Стейна представляет собой веб-сервер, на котором типично, что сервер получает быструю последовательность коротких запросов, его пример обычно перегружен.Создание и уничтожение нового процесса требует времени и ресурсов от всей системы, а не только от самого сервера, потому что вся система обычно имеет только один процессор, который может делать только одну вещь за раз.
Эти всплески внезапной порождающей и разрушающей активности будут преследовать все и замедлить загрузку этой веб-страницы. -
- Простая предварительная развилка:
-
Стейн повторяет несколько версий этого.
Основная идея заключается в том, что при запуске сервера он порождает заранее определенное количество дочерних процессов.На этот раз каждый дочерний процесс включаетaccept
, так что дочерний процесс запускает бесконечный цикл
который блокируется на, принимает
до тех пор, пока к нему не подключится клиент, не обслужит этого клиента, не закроет клиентский сокет и
возвращается к блокировке на, принимает
до тех пор, пока не подключится следующий клиент.
Это устраняет системные накладные расходы на порождение дочерних процессов при попытке обслуживания клиентов.
И это устраняет накладные расходы системы на уничтожение дочерних процессов, потому что они никогда не уничтожаются, а, скорее, повторно используются.В своей первой итерации Штейн завершил родительский процесс после того, как он создал все дочерние процессы; в конце концов, ему больше нечего было делать, передав все дочерним процессам.
Однако возникли проблемы:- Если началось больше подключений, чем имеется предварительно созданных дочерних процессов, они не могут быть обработаны, что замедляет ответ сервера.
Но есть также затраты на производительность и ресурсы для системы для каждого запущенного процесса, поэтому существует практическое ограничение на произвольно большое количество процессов, которые мы могли бы предварительно выполнить. - Если дочерний процесс дает сбой или завершается, заменить его невозможно.
- Нет простого способа завершить работу сервера: нужно было бы обнаружить PID каждого дочернего элемента, и каждый отдельный дочерний элемент должен быть явно завершен.
- Со всеми этими дочерними элементами, блокирующими на
, принимают
на том же прослушивающем сокете, когда новый клиент пытается подключиться, тогда все из этих дочерних элементов будут конкурировать за это соединение одновременно, нагружая систему
поскольку несколько процессов просыпаются одновременно и конкурируют за один и тот же ресурс.Штейн называет это явление «грохочущим стадом». - Некоторые операционные системы не позволяют нескольким процессам одновременно вызывать
accept
в одном сокете.
Штейн решает эти проблемы (кроме первой) на своей второй итерации:
- Устанавливая обработчики сигналов и поддерживая в рабочем состоянии родительский процесс, он может реагировать на убийство дочернего процесса, порождая его замену.
Он также может завершить работу сервера, сигнализируя всем дочерним элементам о завершении работы, обнаруживая, когда все они завершены, а затем завершается. - Посредством «сериализации
accept
call», он решает как «грохочущее стадо», так и множественные проблемыaccept
s.
Настройте механизм синхронизации с низкими системными накладными расходами, такой как файловая блокировка открытого файла, и потомку, который может получить доступ, будет разрешено вызыватьaccept
.
Как только этот дочерний элемент принимает соединение, он снимает блокировку файла, позволяя другому свободному дочернему элементу позвонить по номеру, принять
и так далее.
Однако это по-прежнему не решает первую проблему, а именно недостаточное количество предварительно форкованных дочерних элементов, доступных для удовлетворения запросов пользователей на сервере.Это адресуется в адаптивном сервере предварительной форковки .
- Если началось больше подключений, чем имеется предварительно созданных дочерних процессов, они не могут быть обработаны, что замедляет ответ сервера.
-
- Адаптивная предварительная форковка:
-
Вот где он становится амбициозным и больше похож на реальный сервер.
Мы хотим иметь достаточно детей, чтобы обслуживать всех клиентов, подключенных в настоящее время, плюс еще несколько, чтобы немедленно обрабатывать приходящие новые клиенты, но в то же время мы не хотим, чтобы слишком много детей сидели без дела, тратя впустую системные ресурсы.
Это можно проиллюстрировать множеством сценариев спроса и предложения, но одна аналогия - подход «точно в срок» к системе заводских запасов.Вы хотите, чтобы под рукой было достаточно деталей, чтобы сборочная линия работала бесперебойно, но каждая лишняя неиспользованная деталь в инвентаре - это потраченный впустую капитал.
Вы хотите минимизировать затраты на содержание своего инвентаря, одновременно увеличивая его способность обеспечивать производство кормов.
Как это сделать - отдельная область изучения.
Чтобы действительно упростить это, вы работаете со многими факторами - например, сколько времени занимает получение детали с момента заказа (время выполнения),
сколько деталей используется за определенный период времени (норма расхода) - и получаем две важные цифры:
«высокий уровень» и «низкий уровень» (также термины, которые использует Штейн).Если количество деталей в инвентаре упадет до «нижней отметки», вы рискуете исчерпать запасы (что полностью остановит производство), поэтому пора увеличить количество обычно заказываемых деталей.
Но если она вырастет до «максимальной отметки», вы рискуете получить слишком много деталей на складе, в результате чего вам нужно будет уменьшить количество заказываемых деталей.
Как упоминалось ранее, многие системы спроса и предложения имеют высокие и низкие отметки воды, чтобы поддерживать систему в оптимальном рабочем диапазоне.В случае адаптивного сервера предварительной форкинга, помимо простых решений сервера предварительной форкинга, родительский процесс отслеживает состояние своих дочерних процессов.
Если достигнута "максимальная отметка", когда слишком много детей заняты, то родитель создает больше детей, чтобы справиться с возросшей рабочей нагрузкой; пока система занята созданием этих новых процессов, есть еще несколько неактивных дочерних процессов, которые немедленно обрабатывают входящие новые соединения.
Затем, когда рабочая нагрузка снижается и количество простаивающих дочерних элементов достигает «нижней отметки», родитель убивает лишних дочерних элементов, чтобы уменьшить потери системы.Повышенная сложность адаптивного сервера предварительной форкинга (т.е. «там, где он становится амбициозным») заключается в необходимости более широкого использования межпроцессного взаимодействия (IPC).
Родителя необходимо постоянно информировать о текущем статусе каждого ребенка, чтобы он мог определять высокие и низкие отметки воды.
Он также должен иметь возможность отдавать команду дочернему элементу на завершение как при достижении «максимальной отметки», так и при завершении работы сервера.Существует несколько возможных методов IPC, которые может использовать сервер адаптивной предварительной форковки.Штейн исследует два, трубы и общую память.
Многие подходы и проблемы, описанные в предыдущих схемах разветвления и префоркинга, также применимы в целом к многопоточности.
-
- Простая многопоточность:
-
Как и в случае с простым сервером «accept-and-fork», основной поток простого потокового сервера тратит большую часть своего времени на блокировку на
accept
.
Когда входит новое соединение, он создает рабочий поток для обслуживания этого клиента и возвращается к блокировке наaccept
.Новый поток существует достаточно долго, чтобы обслуживать клиента, а затем завершается, когда клиент отключается.Опять же, как и в случае с простым сервером «принять и разветвить», это постоянное создание и уничтожение рабочих потоков ставит
дополнительная нагрузка на систему при большой нагрузке на сервер.
Накладные расходы не так велики, как при порождении и уничтожении процессов (многопоточность вначале называлась «легковесными процессами»), но они все еще существуют и все еще влияют на производительность. -
- Простая предварительная нитка:
-
Как и в случае с простым сервером предварительной настройки, при запуске основной поток создает прослушивающий сокет, а затем создает все потоки, передавая прослушивающий сокет каждому потоку.
Затем каждый поток блокируется на, принимает
, обслуживает клиента, который к нему подключается, а затем после завершения этого сеанса очищается и возвращается к блокировке наaccept
, ожидая следующего клиента.В то же время основной поток простаивает, ничего не делая, но он не может выйти, как в первом простом примере предварительной форкинга, потому что при многопоточности все потоки закрываются.Существуют те же проблемы «грохочущего стада» и нескольких
accept
s, что и при простом предварительном форкинге, и они решаются таким же образом.Подход, о котором я думал, отличается от подхода Штейна тем, что я предварительно запрограммировал рабочие потоки ClientThread, а затем имел отдельный AcceptThread, который передавал бы новый клиентский сокет незанятому потоку.Мой многопоточный сервер ожидает этого подхода с предварительной потоковой передачей, хотя на самом деле не реализует ее.
Мой подход требует взаимодействия с потоками для отслеживания их статуса, что предвещает следующий подход - адаптивное предварительное выполнение потоков. -
- Адаптивная предварительная резьба:
- Опять же, этот метод отражает метод адаптивной предварительной форковки, за исключением того, что фактическая реализация специфична для потоковой передачи.
-
- Pthreads Пулы потоков:
-
Другой источник, Pthreads Programming от Nichols, Buttlar, & Farrell (O'Reilly, 1998, "книга шелкопряда"),
включает несколько примеров приложений, в том числе сервер банкомата.
При разработке дизайна сервера ATM они обсуждают пулов потоков (страницы с 98 по 107).
Это пример предварительной нитки, который они подробно изучают с помощью кода C (в отличие от списков Perl Штейна).Эта схема предварительно распределяет заранее определенное количество рабочих потоков, информационные структуры которых хранятся в массиве (динамически создаваемом при запуске).
Работа, которую необходимо выполнить, поступает в очередь запросов и принимается одним из незанятых потоков.
Когда задача завершена, поток возвращается в состояние ожидания.
Когда очередь запросов пуста, все рабочие потоки будут простаивать.
Когда все потоки заняты, новые запросы не могут быть обработаны, и система будет уведомлена в зависимости от того, какие операционные параметры были выбраны.Обратите внимание, что это не адаптивный пул, для которого потребуется более динамическая структура данных для хранения пула потоков, но это можно сделать.
Это всего лишь несколько возможностей.