Русский
Русский
English
Статистика
Реклама

Поток

ProcInsp веб-диспетчер задач для Windows

20.02.2021 10:19:11 | Автор: admin

Что такое ProcInsp?

Повторюсь, ProcInsp это еще один диспетчер задач для Windows, однако в отличие от Task Manager и Process Explorer он работает через веб, к тому же собирает информацию с нескольких серверов.

ProcInsp показывает информацию о потреблении RAM и CPU на наблюдаемых серверах (в левой части экрана) и отображает запущенные на них процессы (в правой части):

ProcInsp интегрирован с Kibana, и при щелчке на соответствующую ссылку показывает логи выбранного процесса (в Kibana отправляется запрос, содержащий в фильтре имя хоста и идентификатор процесса). Чтобы различать множество w3wp-процессов, ProcInsp для каждого из них отображает имя пула приложений (для каждого пула IIS запускает свой w3wp-процесс).

Для CLR-процессов возможно получение более детальной информации. Если кликнуть на интересующем нас процессе, то ProcInsp выведет список потоков и их стеков вызовов. Для IIS-процессов он покажет текущие обрабатываемые веб-запросы:

Если внутри потока выброшено исключение, то ProcInsp отобразит его тип, сообщение и стек вызовов. При клике на ссылку Kibana откроется лог, отфильтрованный по хосту, процессу и потоку.

Вот так выглядит экран просмотра стека вызовов (обратите внимание, что ProcInsp подсвечивает точку входа в приложение, оставляя за скобками инфраструктурный код):

Почему мы решили написать ProcInsp?

Мы написали ProcInsp, поскольку не нашли удобного инструмента, позволяющего просматривать стек вызовов работающего CLR-процесса.

Конечно же, можно использовать снятие дампов и WinDbg, но это требует подключения к серверу через RDP, а главное соответствующей квалификации специалиста: к задаче надо подключать как минимум разработчика. Что касается ProcInsp, то он позволяет заглянуть в стек вызовов быстрее (не надо подключаться через RDP, запускать утилиты), а использовать его может тестировщик или инженер службы поддержки.

Возможно, кто-то скажет, что информацию о потреблении ресурсов серверами и процессами необходимо смотреть через системы мониторинга (типа Prometheus). Да, это так, однако тот же Prometheus заточен под получение только числовых характеристик, поэтому через него неудобно (и даже невозможно) просматривать текущие запросы и/или потоки процессов.

Существующие утилиты для мониторинга задач (см. далее раздел Альтернативы ProcInsp) не имеют функции просмотра информации о стеках вызовов на удаленных компьютерах. Восполнение этого пробела еще одна причина написания ProcInsp.

Особенности реализации ProcInsp

Получение общего потребления RAM и CPU сервером

Общее использование CPU ProcInsp получает через PerformanceCounter (пакет System.Diagnostics.PerformanceCounter):

var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", Environment.MachineName);cpuCounter.NextValue();System.Threading.Thread.Sleep(500); //This avoid that answer always 0CpuUsage = (int) cpuCounter.NextValue();

Информация об общем использовании RAM вычитывается через ManagementObjectSearcher (пакет System.Management):

var wmiObject = new ManagementObjectSearcher("select * from Win32_OperatingSystem");            var memoryValues = wmiObject.Get().Cast<ManagementObject>()    .Select(mo => new {    FreePhysicalMemory = Double.Parse(mo["FreePhysicalMemory"].ToString()),    TotalVisibleMemorySize = Double.Parse(mo["TotalVisibleMemorySize"].ToString())}).FirstOrDefault();    if (memoryValues != null){RamUsage = ((memoryValues.TotalVisibleMemorySize - memoryValues.FreePhysicalMemory) / memoryValues.TotalVisibleMemorySize) * 100;}

Код получения общего потребления CPU и RAM см. на GitHub.

Получение общей информации по процессам

Чтобы получить список запущенных на компьютере процессов, можно воспользоваться функцией Process.GetProcesses(), однако в результатах будет отсутствовать информация о параметрах командной строки (а для нас это важная информация, поскольку мы хотим видеть, для какого пула приложений запущен каждый из w3wp-процессов).

Вся необходимая информация, за исключением потребления CPU и RAM, есть внутри объекта Win32_Process, который доступен через ManagementObjectSearcher (пакет System.Diagnostics.PerformanceCounter). Код получения информации по процессам см. на GitHub.

Что касается потребления CPU и RAM отдельным процессом, то эта информация есть в Win32_PerfFormattedData_PerfProc_Process, доступ к которому, опять же, получаем через ManagementObjectSearcher (см. исходный код на GitHub).

Получение списка текущих веб-запросов

В случае IIS-процессов полезной является информация о текущих обрабатываемых веб-запросах. Эта информация доступна через ServerManager пакета Microsoft.WebAdministration (см. исходный код на GitHub).

Получение перечня потоков и их стеков вызовов

Внутри объекта System.Diagnostics.Process есть свойство Threads, однако через него невозможно получить стеки вызовов других процессов (отличающихся от текущего). У Microsoft есть библиотека Microsoft.Diagnostics.Runtime (ClrMD), которая позволяет подсоединиться к запущенному процессу и получить сведения в том числе о стеках вызовов работающих потоков. Исходный код см. на GitHub.

Объем памяти, выделенной для одного потока

При разработке ProcInsp стояла задача определять объем памяти, выделенной под конкретный поток. Дело в том, что Windows выделяет память под процесс, а как эта память распределяется по потокам, не знает. Для того чтобы определить объем кучи потока, было решено написать свой калькулятор (заранее оговорюсь, что идея провалилась: калькулятор дает заниженные данные).

По идее, любое выделение памяти внутри потока приводит либо к появлению нового корневого объекта, либо к созданию ссылки из существующего корневого объекта на вновь созданный (напрямую или через иерархию объектов).

Перебрать корневые объекты, доступные из потока, можно при помощи пакета ClrMD. Далее для каждого из объектов можно получить объем памяти, а также информацию о дочерних объектах (объекты, на которые ссылается корневой объект). Для дочерних объектов, в свою очередь, доступна та же информация (объем памяти и ссылки).

Получается, при помощи обычной рекурсии, начинающейся от корневых объектов, мы теоретически получаем возможность обойти всю иерархию объектов и вычислить объем выделенной под поток памяти. Однако здесь у нас возникли сложности:

  1. Обход больших деревьев занимает слишком много времени (а иногда и вовсе приводит к зависаниям), поэтому мы ввели ограничение на глубину и ширину обхода.

  2. Некоторые объекты могут быть доступны сразу из нескольких потоков. Например, статическое поле класса будет доступно из всех потоков. Это приведет либо к тому, что поле класса будет обойдено при обходе каждого потока, либо к тому, что поле класса не будет обойдено ни разу.

Мы не стали выяснять, из-за чего все-таки не удается определить хотя бы порядок объема памяти, выделенной под поток. Возможно, этим будет интересно заняться кому-то из наших читателей :) Наша (не рабочая) реализация обхода кучи здесь.

Архитектура и точки расширения

ProcInsp отображает информацию о потреблении ресурсов на множестве серверов: клиентская часть (реализована на React и TypeScript) посылает асинхронные запросы на серверы, на которых развернуты точки входа ASP.NET Core. Клиентская и серверная части ProcInsp обмениваются друг с другом информацией через WebAPI.

При необходимости сбор информации с серверов можно осуществлять другой утилитой (реализованной, к примеру, на Java или Node.JS). С другой стороны, клиентская часть ProcInsp может собирать информацию с серверов, скажем, под управлением Linux или MacOS, если на них реализован необходимый API. Полная информация о поддерживаемых WebAPI-запросах доступна здесь.

Конфигурирование ProcInsp

Серверная часть ProcInsp в настоящий момент не конфигурируется.

Конфигурация клиентской части ProcInsp задается в файле \ClientApp\build\config.js. В настоящий момент поддерживаются следующие настройки:

  • InspServers адреса серверов, с которых ProcInsp собирает данные.

  • IisProcs имена процессов, которые должны отображаться при включенной опции Only IIS.

  • Kibana.Procs адрес Kibana, по которому доступны логи для заданного процесса. Поддерживает местозаместители: ${pid}, ${machineName}, ${machineNameLowercase}.

  • Kibana.Threads адрес Kibana, по которому доступны логи для заданного потока. Поддерживает те же местозаместители, что и Kibana.Procs, а также ${threadId}.

  • Entrypoint.Contains строки, одна из которых должна быть в имени функции, служащей точкой входа. Данная настройка вместе со следующей задает правила, по которым ProcInsp ищет точку входа в стеке вызовов (чтобы подсветить метод, отображающий суть происходящего в приложении).

  • Entrypoint.NotContains строки, которых не должно быть в имени функции, служащей точкой входа.

  • Requests.UrlInfo регулярное выражение, при помощи которого ProcInsp получает основную информацию из строк запросов к IIS. Например, из www.mysite.com/Request=MyMainMethod можно получить строку MyMainMethod для отображения в списке запросов.

Актуальная информация о перечне и типах настроек доступна в файле globals.d.ts.

Ограничения

ProcInsp умеет получать подробную информацию о потоках только для CLR-процессов. Для нативных и Java-процессов отображаются лишь идентификаторы запущенных потоков и время их старта.

ClrMD умеет получать данные только по процессам, чья битность совпадает с запущенным процессом (в нашем случае процессом ProcInsp). Это означает, что если ProcInsp запущен как 32-битное приложение, то он сможет получить данные о стеках вызовов только по 32-битным процессам. Аналогично 64-битный ProcInsp будет иметь доступ только к данным о 64-битных приложениях.

Возможный обходной путь здесь таков: запускать 2 экземпляра ProcInsp (по экземпляру на каждую битность) и присылать запросы по процессу на правильный экземпляр, работающий в нужной битности.

Ограничение не распространяется на отображение списка процессов: вне зависимости от того, в какой битности запущен ProcInsp, отображаются все процессы.

Текущие обрабатываемые запросы отображаются только для IIS.

Альтернативы ProcInsp

Сначала рассмотрим утилиты, позволяющие получать информацию с удаленных компьютеров.

PsList

Remote Process Explorer

Remote Process Viewer

Desktop Central

ProcInsp

Вид

Командная строка

Windows-приложение

Windows-приложение

Веб-приложение

Веб-приложение

Просмотр списка процессов

+

+

+

+

+

Инф-я о потреблении ресурсов процессом

+

+

+

+

+

Просмотр списка потоков

+

+

Просмотр стеков вызовов

+

Лицензия

Бесплатно для некоммерческого использования

Бесплатно для личного использования

Бесплатно

Платно

Бесплатно

Как видно, только ProcInsp умеет получать с удаленной машины информацию о стеках вызовов.

Однако существует ряд приложений, которые позволяют просматривать перечень потоков и их стеков вызовов на текущем компьютере. Эти утилиты имеют примерно одинаковые возможности, различаясь лишь наличием/отсутствием пользовательского интерфейса:

В интернете есть упоминания утилит Managed Stack Explorer и Clr Stack Explorer, имеющих графический интерфейс, однако первое приложение не запускается, а для второго не работают ссылки на скачивание.

WinDbg и DebugDiag также позволяют просмотреть перечень потоков и их стеков вызовов. Упоминаю их отдельно от остальных, поскольку утилиты имеют широкий круг возможностей по снятию и анализу дампов приложений и являются не диспетчерами задач, а средствами отладки.

Планы на будущее

В будущем планируется сделать ProcInsp кроссплатформенным, то есть научить его выводить информацию о процессах, запущенных на Linux и MacOS. Планируется добавить возможность просмотра подробной информации по нативным и Java-процессам, просмотр активных веб-запросов nginx и других веб-серверов, поддержку Docker. Также полезно добавить возможность управлять процессами, как минимум прерывать их и снимать дампы.

Использованные пакеты

Пакет

Получаемая информация

System.Diagnostics.PerformanceCounter

Общее потребление CPU на сервере

System.Management

Общее потребление RAM на сервере, список запущенных процессов и потребление ими RAM/CPU

Microsoft.WebAdministration

Список активных веб-запросов

Microsoft.Diagnostics.Runtime (ClrMD)

Работающие потоки и их стеки вызовов

Ссылки

Подробнее..

Живой пылесос динамика хобота слона во время притягивания объектов

11.06.2021 10:21:30 | Автор: admin


В мире природы полно созданий, отличающихся своим необычным методом передвижения, внешним видом, гастрономическими предпочтениями, поведением и т.д. Конечно, для них самих ничего необычного нет, ибо все это является результатом сотен тысяч лет эволюции, нацеленной на выживание вида в постоянно меняющихся условиях окружающей среды. То, что является необходимостью для животного, для нас становится объектом исследований и вдохновением в разработках, применяемых в самых разных отраслях, от медицины до робототехники. Так ученые из Технологического института Джорджии (США) решили провести детальный анализ хобота слона, с помощью которого травоядный гигант способен и пить, и собирать еду. Что происходит с хоботом, когда слон пьет, какую силу он применяет, когда поднимает мелкие объекты, и где можно применить полученные данные? Ответы на эти вопросы мы найдем в докладе ученых. Поехали.

Основа исследования


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

Для слонов же хобот, образованный из носа и верхней губы, является своего рода швейцарским ножом. С его помощью они набирают воду (которую потом выливают в рот), подбирают мелкие предметы, срывают плоды, дышат во время переправы через водоемы, используют в коммуникации со своими сородичами и т.д.


Изображение 1

Один африканский слон (Loxodonta africana) ежедневно потребляет более 200 кг растительности, тратя около 18 часов в день на добычу травы, листьев, фруктов и коры деревьев (1a).

Самое удивительно то, что хобот слона может весить порядка 100 кг, но при этом слон с легкостью может поднять с пола мелкий и хрупкий предмет, не повредив его. Секрет такой аккуратности не только в гибкости и подвижности хобота, но и в воздухе, который он всасывает. Ученые предположили, что важную роль в том, как слон манипулирует хоботом, играют ноздри и легкие животного. Во время всасывания воды также происходят определенные изменения, вызванные сокращением мышц, что позволяет слону получать больше воды за один заход.

Факт того, что слоны используют воду и воздух в качестве дополнительных инструментов для манипуляции с объектами окружающей среды, был описан еще в 1871 году Чарльзом Дарвином. Он заметил, что слоны могут перемещать объекты вне их досягаемости с помощью дуновения через хобот. Слоны могут регулировать продолжительность дуновения в зависимости от расстояния до объекта и даже намеренно направлять струю воздуха на стену, которая затем оттолкнет объект ближе к ним.

Ученые отмечают, что животные, которые манипулируют объектами с помощью потока жидкости, обычно обитают в воде, а не на суше. Ярким примером являются рыбы из рода Toxotes (брызгуны), способные выстреливать струей воды в насекомых над поверхностью водоема.


Брызгун на охоте.

Кальмары и осьминоги также стреляют водой, но не для охот, а для передвижения. Многие виды рыб используют так называемое всасывающее кормление, когда они втягивают еду в ротовое отверстие.

Учитывая уникальность подобного поведения среди наземных существ, слоны и их хоботы требуют изучения, считают ученые. Посему было проведено несколько тестов, во время которых ученые фиксировали любые изменения морфологии хобота слона во время кормления, забора воды и манипуляций с мелкими хрупкими объектами.

Результаты исследования


В ходе тестов (14 заходов) подопытного слона кормили брюквой, нарезанной кубиками разных размеров. Захват хоботом менялся в зависимости от размера и количества кубиков (1b). Когда слону давали 10 мелких кубиков (менее 40 мм), он использовал цепкий конец хобота без всасывания. Если же мелких кубиков было больше 10, то слон предпочитал всасывание (1c). Забавно, что ученые охарактеризовали звук, которым сопровождался этот процесс, как звук работающего пылесоса.


Методы сбора мелких (16 мм) и крупных (32 мм) кубиков брюквы. В первом случае присутствует всасывание (обратите внимание на звук). Во втором его нет, так как кубики слишком большие.

Любопытно, что во время тестов с зернами всасывание не использовалось, вместо этого слон пытался захватить как можно больше зерен в пригоршню. Скорее всего всасывания не было, чтобы предотвратить застревание зерен в хоботе.

Далее трапеза слона продолжилась чипсами (тортилья), чтобы оценить его взаимодействие с крупными плоскими объектами. Толщина чипса не более 500 мкм, посему его сложно поднять с плоской поверхности (использовалась силовая платформа). Для разрушения чипса нужно приложить силу в 11 2 Н (Ньютон), что составляет около 1% от веса хобота слона.

После первого контакта процесс поднятия чипса занимал 3.0 0.2 секунды. Сам процесс можно разделить на три этапа (1d и 1e): приближение к объекту, поиск объекта, подъем объекта.


Притягивание чипса методом всасывания воздуха (видео замедлено в 5 раз).

Слон сначала не касался чипса напрямую, а дотрагивался до внешнего края силовой платформы, прикладывая при этом силу в 4 1 Н. На этапе поиска он приближался к чипсу, применяя силу в 5 Н, т.е. 50% от необходимой для разрушения чипса силы.

Во время этапа подъема наблюдалось два разных поведения. В первом случае слон применял всасывание на фиксированном расстоянии от чипса (1d). Во втором применял всасывание, прижимая хобот прямо к чипсу (1e). Любопытно и то, что в любом случае слон практически всегда поднимал чипс без его повреждения.

Визуальные наблюдения за слонами хоть и веселое занятие, но они дают слишком мало данных. Потому ученые дополнительно измеряли создаваемое давление всасывания во время тестов с водой. Дабы лучше визуализировать поток, всасываемый хоботом, в воду были добавлены семена чиа. Профиль потока кажется параболическим, о чем свидетельствует большее расстояние, пройденное семенами чиа в области центра ноздрей ().


Изображение 2

График 2c показывает ход потока жидкости в хоботе по времени, измеренный по мере уменьшения жидкости в резервуаре. Во время трех тестовых заходов слон всасывал воду в течение 1.5 0.1 с, что соответствует объемному расходу Qw = 3.7 0.3 л/с. И тут ученые опять проводят странное сравнение (для американцев это вполне нормальная практика): такой объемный расход эквивалентен 20 смывам туалета (не знаю, как такое сравнение может помочь оценить или визуализировать силу потока, но ладно).


Эксперимент с всасыванием воды.

Общий объем жидкости в хоботе составил 5.5 0.41 литра. После всасывания 3 литров была пауза примерно в полсекунды, в момент которой скорость потока была 1 1.2 л/с. Затем поток снова увеличивался до 4.5 2.1 л/с в последние полсекунды цикла всасывания. Подобная динамика наблюдалась во время всех наблюдений. Ученые предполагают, что кратковременные перерывы во время всасывания необходимы для предотвращения попадания воды в постериальный сфинктер хобота.

Для дальнейшего анализа необходимо было установить внутренний объем хобота (длиной примерно 1.9 м). Для этого были использованы данные измерений поперечного сечения хобота. Полость хобота имеет радиус 1 см на дистальном конце и 3 см на проксимальном. Расчетный объем хобота в таком случае будет 5.2 литра, что почти равно объему втягиваемой воды (5.5 л). Как слон может втягивать воду в объеме большем, чем объем его собственного хобота? Ранее проведенные исследования показали наличие мышечной структуры, идущей от ноздрей, которая позволяет хоботу расширяться.

Далее ученые провели ультразвуковое исследования (3a), чтобы выяснить пределы расширения этой структуры. Ультрасонографические измерения стенок хобота проводились в трех условиях: естественное дыхание, втягивание воды и втягивание воды с отрубями.


Изображение 3

На снимках 3c и 3d видно, что радиальные мышцы сокращались, когда слон втягивал воду с отрубями.


Ультразвуковое исследование носовой стенки слона во время всасывания отрубей. Красной стрелкой отмечена граница между жидкостью и стенкой носа.

Исходный радиус хобота и ноздри равны 7.5 и 1.5 см соответственно. Следовательно, толщина исследуемой стенки хобота равна 6 см. При всасывании воды толщина стенки уменьшалась до 5.7 см, а при всасывании воды с отрубями до 5.6 см.

Было установлено, что радиус ноздри во время всасывания воздуха, воды и воды с отрубями составил: 1.5 0.2 см, 1.8 0.2 см и 1.9 0.2 см соответственно (3e). Таким образом значения радиуса во время всасывания воды и воды с отрубями увеличивались на 18% и 28% соответственно.

Если предположить, что радиус увеличивается по всей длине хобота, то внутренний объем хобота увеличивается на 40% для воды и на 64% для воды с отрубями.

Однако у любой системы есть свой предел. Ученые создали математическую модель для расчета эффективного расстояния для кормления методом всасывания (2d). Модель позволила установить максимальное давление, применяемое в экспериментах с водой, и максимального расстояния от чипса, на котором слон может его поднять с помощью всасывания.

В экспериментах с водой средняя скорость воды (uw) в хоботе представляет собой расход, деленный на площадь поперечного сечения ноздрей: Qw / (2a2) 2.7 м/с, где a = 2.1 см это радиус ноздри. Максимальное давление наблюдалось в конце цикла всасывания, когда вода достигает максимальной скорости и высоты в хоботе. Если рассчитать число Рейнольдса* потока внутри ноздри, можно узнать, испытывает ли жидкость турбулентность.
Число Рейнольдса* отношение инерционных сил к силам вязкого трения в вязких жидкостях и газах.
Число Рейнольдса для транспортировки воды по трубе Rew = 8.1 х 104, а число Рейнольдса для воздуха 4.2 х 106. Учитывая, что эти числа Рейнольдса выше 4000, для аппроксимации можно использовать закон Бернулли*. В результате было установлено, что прилагаемое давление составляет -20 кПа.
Закон Бернулли* если вдоль линии тока давление жидкости возрастает, то скорость течения убывает, и наоборот.
Если аналогичное давление применяется во время всасывания чипса, то скорость воздуха составляет 150 м/с. Также расчеты показывают, что расстояние, на котором слон может эффективно притягивать объекты, линейно зависит от размера ноздри. Следовательно, объект с меньшей массой или большей площадью может эффективно всасываться и на большем расстоянии, чем во врем экспериментов с чипсами.

В экспериментах площадь поверхности чипса составляла 113 см2, а масса 10 г. Учитывая ускорение свободного падения (в расчетах было 9.81 м/с2) и рассчитанное давление (-20 кПа), ученые установили, что максимальная высота эффективного всасывания составляет 4.6 см.

Важнейшим аспектом, влияющим на эффективность всасывания, является давление в легких слона. Слоны могут создавать высокое давление в легких из-за их специализированной дыхательной системы. Растяжимая сеть коллагеновых волокон заполняет плевральное пространство, свободно соединяя легкие с грудной стенкой, при это не ограничивая движения легкого по отношению к грудной стенке (Почему у слона нет плевральной полости?, Джон Б. Уэст, 2002).

Именно эта анатомическая особенность позволяет генерировать потоки воздуха с такой большой скоростью. Кроме того, эндоторакальная фасция* у слонов в восемь раз толще, чем у людей, кроликов, крыс и мышей, что может создавать дополнительное давление в их легких.
Эндоторакальная фасция* слой рыхлой соединительной ткани глубоко в межреберных промежутках и ребрах, отделяющий эти структуры от подлежащей плевры. Фасциальный слой является самой внешней мембраной грудной полости.


Изображение 4

В заключение ученые, основываясь на полученных данных, решили определить, способны ли другие животные притягивать объекты всасыванием, как и слоны. Сначала было оценено соотношение массы тела к радиусу ноздри (4a), который увеличивается с размерами существа (из тех, что учитывались в расчетах).

У слонов самые широкие ноздри из всех исследованных млекопитающих, с радиусом ноздри от 10 мм на кончике до 30 мм на расстоянии 90 см от него. Используя слонов как точку отчета, ученые составили диаграмму максимального расстояния, на котором млекопитающие в теории может притягивать объекты всасыванием (4b). К примеру, для коров такое расстояние составляет 1 см, а для свиней и тапиров 0.65 см.

Ну и самое забавное, конечно. Человек тоже может притягивать предметы всасывая воздух, правда они будут не толще листа бумаги, а максимальное расстояние для успешности трюка с чипсом не может быть больше 0.4 мм. А любые флуктуации воздуха между чипсом и носом сделает трюк невыполнимым.

Для более детального ознакомления с нюансами исследования рекомендую заглянуть в доклад ученых.

Эпилог


За что можно любить науку, так это за ее безграничность. Человек готов с необъятным любопытством исследовать все, от таинственного космоса и глубин океанов до хобота слона.

В данном исследовании ученые провели эксперименты и расчеты, детально описывающие то, как именно слону удается притягивать объекты с помощью всасывания. С одной стороны это кажется весьма простым процессом, однако для его реализации необходимо множество факторов, от нестандартных легких до гибкой мышечной структуры хобота.

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

Слоны это удивительные создания, которых можно с легкостью назвать примером того, как даже самые, на первый взгляд, странные причуды эволюции обладают смыслом, логикой и практическим применением.

Благодарю за внимание, оставайтесь любопытствующими и отличных всем выходных, ребята. :)

P.S. Большая просьба после прочтения сего материала не пробовать дома притянуть чипсы методом втягивания воздуха. Вряд ли авторы исследования хотели, чтобы вы поперхнулись, пытаясь изобразить Дамбо.

Немного рекламы


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Maincubes Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru