По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
JIT-компиляция – это метод повышения производительности интерпретируемых программ. JIT расшифровывается как Just-in-time. Во время выполнения программа может быть скомпилирована в машинный код для повышения ее производительности. Также этот метод известен как динамическая компиляция. Динамическая компиляция имеет несколько преимуществ перед статической. При запуске приложений на JAVA или C# среда выполнения может профилировать приложение во время его исполнения. Это позволяет создавать более оптимизированный код. Если поведение приложения меняется во время его исполнения, то среда выполнения может перекомпилировать код. Есть некоторые недостатки, заключающиеся в задержках при запуске или непроизводительных издержках при компиляции во время выполнения. Чтобы ограничить эти издержки, многие JIT-компиляторы компилируют только пути кода, которые часто используются. Обзор Традиционно существует два метода преобразования исходного кода в форму, которую можно запустить на платформе. Статистическая компиляция преобразует код в язык для конкретной платформы. Интерпретатор непосредственно выполняет исходный код. JIT-компиляция пытается использовать преимущества обоих. В то время как выполняется интерпретируемая программа, JIT-компилятор определяет участки часто используемого кода и компилирует его в машинный код. В зависимости от компилятора это можно сделать для метода или меньшего участка кода. Впервые динамическая компиляция была описана в статье о языке LISP Дж. Маккарти в 1960 году. Компиляция на лету, JIT или динамическая компиляция – это компиляция, которая выполняется непосредственно во время исполнения программы, а не до этого. Что в этот момент происходит? Перевод в машинный код. Преимущества JIT-компиляции заключаются в том, что поскольку компиляция происходит во время выполнения, то JIT-компилятор имеет доступ к динамической информации времени выполнения, а это в свою очередь позволяет ему оптимизировать процесс (например, встраивать функции). Что важно понимать, когда речь идет о JIT-компиляции? Она скомпилирует байт-код в инструкции машинного кода работающего компьютера. Это означает, что полученный машинный код оптимизирован для архитектуры процессора конкретного компьютера. В качестве примеров JIT-компиляторов можно привести JVM (Java Virtual Machine - виртуальная машина Java) на Java и CLR (Common Language Runtime – общеязыковая исполняющая среда) на C#. История Изначально компилятор отвечал за преобразование языка высокого уровня (выше, чем ассемблер) в объектный код (машинные инструкции), который затем должен был быть связан (линкером) с исполняемой программой. В какой-то момент эволюции языков компиляторы начали компилировать язык высокого уровня в псевдокод, который затем интерпретировался (интерпретатором) для запуска программы. Это исключило объектный код и исполняемые программы и позволило перенести эти языки на несколько операционных систем и аппаратных платформ. Одним из первых был Pascal (который скомпилирован в P-Code); более современными примерами являются Java и C#. Со временем термин P-Code был заменен на байт-код, поскольку большинство псевдоопераций имеют длину в один байт. JIT-компилятор – это функция интерпретатора, которая вместо интерпретации байт-кода при каждом вызове компилирует байт-код в инструкции машинного кода работающей машины, а затем вызывает этот объектный код. В идеальном варианте эффективность выполнения объектного кода должна превзойти неэффективность перекомпиляции программы при каждом ее запуске. Обычный сценарий Исходный код полностью преобразуется в машинный код. JIT-сценарий Исходный код преобразуется в структуру на языке ассемблера, например, IL (промежуточный язык) для C#, ByteCode для Java. Промежуточный код преобразуется в машинный только тогда, когда приложение нуждается в том, чтобы необходимые коды были преобразованы в машинный код. JIT или не JIT При JIT-компиляции не весь код преобразуется в машинный код. Для начала преобразуется только необходимая часть кода. Затем, если вызываемый метод или выполняемые функции находятся не в виде машинного кода, то они тоже будут преобразованы в машинный код. Это снижает нагрузку на ЦП. Поскольку машинный код будет генерироваться во время выполнения, то JIT-компилятор создаст машинный код, оптимизированный для запуска архитектуры ЦП машины. Ниже приведены некоторые примеры JIT-компиляторов: Java: JVM (Java Virtual Machine – виртуальная машина Java) C#: CLR (Common Language Runtime – общеязыковая исполняющая среда) Android: DVM (Dalvik Virtual Machine – виртуальная машина Dalvik) или ART (Android RunTime – среда выполнения Android-приложений) в новых версиях Виртуальная машина Java (JVM) выполняет байт-код и ведет подсчет времени выполнения функции. Если это значение превышает предустановленный порог, то JIT-компилятор компилирует код в машинный код, который в дальнейшем может быть выполнен непосредственно процессором (в отличие от случая, когда javac компилирует код в байт-код, а затем интерпретатор интерпретирует этот байт-код построчно, переводя его в машинный код, и выполняет его). Кроме того, при следующем вычислении функции тот же скомпилированный код выполняется снова, в отличие от обычной интерпретации, когда код повторно интерпретируется построчно. Это значительно ускоряет процесс выполнения программы.
img
В этой статье мы расскажем как настроить LACP (Link Aggregation Control Protocol) И PAgP (Port Aggregation Protocol), которые носят гордое название EtherChannels - агрегирование каналов. На самом деле EtherChannel это технология агрегации (объединения) каналов. Это означает, что мы можем объединить несколько линков в один логический, что позволит увеличить пропускную способность между коммутаторами. Пример использования Взглянем на схему ниже: В рамках данной схемы мы имеем серверную инфраструктуру, которая подключена в коммутатору распределения (distribution switch) через свой коммутатор. За коммутатором распределения сидят коммутаторы доступы, за которым расположились пользовательские рабочие станции: Если мы подключим два коммутатор линком в 1ГБ/сек, то потенциально, мы можем столкнуться с проблемой «бутылочного горлышка», то есть узкого места. Тогда пользователи испытают проблемы с доступом к серверной ферме. Используя технологию EtherChannel, мы можем объединить до 8 интерфейсов (физических) в один логический линк (агрегация портов, Port-Channel) и трафик будет распределяться между физическими портами равномерно (балансируя нагрузку). В нашем примере мы объединили 4 (четыре) гигабитных линка между рабочими станциями и серверами в один, с пропускной способностью 4ГБ/сек. Это увеличило общую пропускную способность и добавило отказоустойчивость линков! Не забывайте про STP (Spanning-tree protocol). В случае агрегации портов, мы исключаем STP петли. Режимы EtherChannel Каждый из протоколов LACP или PAgP имеет по 3 режима работы, которые определяют режим его активности (инициализировать ли построение агрегации со своей стороны, или ждать сигнал с удаленной стороны): LACP Modes: ON, ACTIVE, PASSIVE; PAgP Modes: ON, DESIRABLE, AUTO; Давайте посмотрим, в каком из случае будет установлено соединение EtherChannel при различных режимах настройки. Для LACP: Коммутатор №1 Коммутатор №2 Установится ли EtherChannel? ON ON Да ACTIVE ACTIVE/PASSIVE Да ON/ACTIVE/PASSIVE Not configured (off) Нет ON ACTIVE Нет PASSIVE/ON PASSIVE Нет Теперь разберемся с PAgP: Коммутатор №1 Коммутатор №2 Установится ли EtherChannel? ON ON Да DESIRABLE DESIRABLE/AUTO Да ON/DESIRABLE/AUTO Not configured (off) Нет ON DESIRABLE Нет AUTO / ON AUTO Нет Настройка Ок, предположим, что порты с Gi0/0 по Gi0/3 буду использованы для агрегации EtherChannel. Лучше всего настроить логический интерфейс (агрегированный) в качестве транка, чтобы пропускать VLAN между коммутаторами. Поднимаем LACP В нашем случае switch1 будет активном (Active) режиме, а switch2 будет в пассивном (Passive) режиме. switch1(config)# interface range Gi0/0 -3 // выбираем диапазон из 4х интерфейсов; switch1(config-if-range)# channel-protocol lacp // указываем протокол как LACP; switch1(config-if-range)# channel-group 1 mode active // указываем активный режим; switch1(config-if-range)# exit switch1(config)# interface port-channel 1 // конфигурируем логическую сущность как транк; switch1(config-if)#switchport trunk encapsulation dot1q switch1(config-if)#switchport mode trunk switch2(config)# interface range Gi0/0 – 3 // выбираем диапазон из 4х интерфейсов; switch2(config-if-range)# channel-protocol lacp // указываем протокол как LACP; switch2(config-if-range)# channel-group 1 mode passive // указываем пассивный режим; switch2(config-if-range)# exit switch2(config)# interface port-channel 1 // конфигурируем логическую сущность как транк; switch2(config-if)#switchport trunk encapsulation dot1q switch2(config-if)#switchport mode trunk Поднимаем PAgP В этом случае switch1 будет Desirable - режиме, а switch2 будет в автоматическом (Auto) режиме. switch1(config)# interface range Gi0/0 -3 // выбираем диапазон из 4х интерфейсов; switch1(config-if-range)# channel-group 1 mode desirable // указываем desirable режим; switch1(config-if-range)# exit switch1(config)# interface port-channel 1 // конфигурируем логическую сущность как транк; switch1(config-if)#switchport trunk encapsulation dot1q switch1(config-if)#switchport mode trunk switch2(config)# interface range Gi0/0 – 3 // выбираем диапазон из 4х интерфейсов; switch2(config-if-range)# channel-group 1 mode auto // указываем автоматический режим; switch2(config-if-range)# exit switch2(config)# interface port-channel 1 // конфигурируем логическую сущность как транк; switch2(config-if)#switchport trunk encapsulation dot1q switch2(config-if)#switchport mode trunk Полезные команды Вот некоторые команды, которые могут понадобиться вам в работе с EtherChannel: show etherchannel summary show etherchannel 1 port-channel show interfaces etherchannel
img
Всем привет! В одной из прошлых статей мы писали об организации офисной IP-DECT телефонной сети на базе решения Grandstream DP715. Так вот на днях к нам приехал его “старший брат” - Grandstream DP750 с трубками DP720. Поэтому сейчас будет небольшой анпакинг. Потом мы настроим базу и трубки, а также зарегистрируем их на IP-АТС Asterisk 13. /p> $dbName_ecom = "to-www_ecom"; $GoodID = "3437215979"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName_ecom) or die(mysql_error()); $query_ecom = "SELECT `model`, `itemimage1`, `price`, `discount`, `url`, `preview115`, `vendor`, `vendorCode` FROM `items` WHERE itemid = '$GoodID';"; $res_ecom=mysql_query($query_ecom) or die(mysql_error()); $row_ecom = mysql_fetch_array($res_ecom); echo 'Кстати, купить '.$row_ecom['vendor'].' '.$row_ecom['vendorCode'].' можно в нашем магазине Merion Shop по ссылке ниже. С настройкой поможем 🔧 Купить '.$row_ecom['model'].''.number_format(intval($row_ecom['price']) * (1 - (intval($row_ecom['discount'])) / 100), 0, ',', ' ').' ₽'; $dbName = "to-www_02"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName) or die(mysql_error()); Обзор База DP750 и трубки DP720 поставляются в фирменной коробке от производителя. В отличие от DP715, база DP750 больше не является ещё и зарядным стаканом для трубок. В комплект поставки базы DP750 входит: Сама база DP750; Зарядное устройство на 5В; Ethernet – кабель; Руководство по быстрой установке; Лицензионное соглашение На крышке базы DP750 расположены: Индикатор питания; Индикатор доступности сети; Индикатор регистрации SIP-аккаунта; Индикатор занятости линии. Мигает, если занята хотя бы одна линия; Индикатор радио-сигнала. Мигает, если база готова принимать регистрацию трубки Мы, как назло, забыли сфотографировать базу включённой, чтобы продемонстрировать индикацию :( На боковой панели располагаются: Разъём для подключения блока питания; Кнопка сброса к заводским настройкам; Физический интерфейс для Fast Ethernet; И физическая кнопка для ввода базы в режим поиска трубки. Запомните её, в процессе регистрации трубок на базе она нам очень понадобится и не раз :) Используется также для “пинга” зарегистрированных трубок. В комплект поставки трубок DP720 входит: Сама трубка DP720; 2 батарейки типа ААА (аккумуляторы); Задняя крышка отсека для батареек и зажим для крепления на поясе; Зарядный стакан; Блок питания на 5В; Руководство Вот так это выглядит в собранном состоянии: Настройка Итак, перейдём к настройке. Сначала выясним IP-адрес базы, который она по умолчанию получит по DHCP. Для этого берём одну трубку, нажимаем на кнопку слева от центральной, далее Settings → Registration начнётся поиск базы. После этого на базе зажимаем на 15 секунд ту самую кнопку для ввода базы в режим поиска, пока индикатор радио сигнала не начнёт мигать. Через некоторое время трубка зарегистрируется на базе. У неё пока может не быть SIP-аккаунта, а база пока может не знать об IP-АТС. Теперь мы можем узнать IP-адрес базы. Берём трубку, далее Status и стрелочками листаем до IP-адреса. После чего вбиваем его в адресную строку браузера: Логин и пароль по умолчанию admin/admin Первое, на что обращаешь внимание – это полностью переработанный дизайн web-интерфейса по сравнению с DP715. На вкладке STATUS пока может быть пусто. Настроим SIP-профиль для нашей базы, т.е укажем как найти IP-АТС. Для этого заходим во вкладку PROFILE → General Settings и в поле SIP Server указываем адрес нашей IP-АТС и порт, на который она принимает регистрации. На данном этапе, рекомендуем позаботиться о том, чтобы на Вашей IP-АТС уже был заведён внутренний номер для трубок, которые Вы хотите зарегистрировать. Как создать внутренний номер на FreePBX 13, можно почитать в нашей статье. Если внутренние номера готовы, то переходим на вкладку DECT, далее SIP Account Settings и заполняем в соответствии с настройками внутреннего номера, который мы завели на IP-АТС. В нашем случае, это номер 124 – User1. На забываем нажимать Save and Apply Теперь берём трубку и вводим её в режим регистрации - нажимаем на кнопку слева от центральной, далее Settings → Registration начнётся поиск базы. Подходим к базе и зажимаем кнопку для ввода в режим регистрации. Напомним, зажимать нужно в течение 15 секунд, пока индикатор не начнёт мигать. Через какое-то время, трубка зарегистрируется на базе и вы увидите имя внутреннего номера на дисплее. Если регистрируется подряд несколько трубок, то может потребоваться перезагрузить базу. Проверить, что трубка успешно зарегистрировалась, теперь можно на вкладке STATUS
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59