Рубрика «скорость работы»

В Штатах адреса всей бумажной почты сканируются и автоматически распознаются. Однако, если адрес написан неразборчиво или поврежден, он отправляется в Центр удаленного декодирования Почтовой службы США в Солт-Лейк-Сити.

Там около 800 человек круглосуточно занимаются тем, что за 4 секунды должны перевести нечитаемый адрес в странный код, разработанный Siemens в 1990-х годах (надо ли добавлять, что он не интуитивен и сложен?). Поскольку работники используют сотни быстрых сочетаний клавиш, у них даже клавиатуры специальные.

image

Если меня когда-нибудь спросят о странной организации работ или о плохом UX/UI-дизайне, пожалуй, я покажу им вот этот пост. Посмотрите, как может выглядеть такая деятельность.
Читать полностью »

Исследование: становилась ли Windows 10 медленнее с каждым feature update? - 1

Одной из основных причин того, что некоторые люди избегают обновления своих ПК, стало то, что «обновления тормозят систему». Особенно это актуально для Windows 10 с её схемой Software as a Service, при которой ОС дважды в год получает «feature update». Но так ли это на самом деле?

Сегодня мы выясним, насколько менялась производительность Windows 10 со временем, проведя бенчмарки десяти аспектов работы с ОС:

  • Время установки
  • Время загрузки/перезагрузки
  • Запуск приложений Win32
  • Запуск приложений UWP
  • Windows Search
  • Производительность GDI
  • Нагрузочные испытания GDI
  • Быстрое сканирование Windows Defender
  • Производительность ввода-вывода
  • Выключение

Но для начала небольшое пояснение: хотя я стремился к максимально объективному сравнению метрик производительности, в моих измерениях могут быть погрешности. В этом эксперименте я использовал в качестве гипервизора для каждой сборки Hyper-V с 4 ГБ ОЗУ, 4 ядрами и 32 ГБ накопителя.

Каждая версия устанавливалась на чистую систему.

Итак, давайте приступим!
Читать полностью »

image

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

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

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

А может быть, так и надо? Может быть, «традиционное» видеонаблюдение действительно закрывает все потребности бизнеса?

Мы решили провести практическое сравнение двух систем, чтобы окончательно поставить точку в споре об эффективности облака и подключенной к Интернету локальной системе.
Читать полностью »

Приветствую вас!
После изучения коллекций, а именно такие реализации List, как ArrayList и LinkedList, возникла идея, а почему бы не объединить эти структуры данных в одну и посмотреть, что из этого получится.

Зачем это нужно?

  • Проблема ArrayList — у него есть начальный размер по умолчанию DEFAULT_CAPACITY или заданный размер initialCapacity, при превышении этого размера, создается новый массив большего размера, при этом туда копируются данные из старого массива, что по времени очень затратно и именно это дает в наихудшем случае алгоритмическую сложность O(n)
  • Проблема LinkedList — здесь наоборот, добавить новый элемент, это всего лишь добавить новую связь (создать еще одну Node и добавить ссылку на неё), но операция получения элемента по индексу очень затратна, т.к. нужно будет пройтись по всему списку от начала, что очень затратно и дает O(n)

Решение

Что если создать такую структуру данных, при которой вставка и получение любого элемента будет за константное время. Буду использовать технологию ArrayList без пересоздания массива, что конечно же проигрывает по памяти, но выигрывает в скорости, т.к. память дешевая и её очень много, выигрыш в производительности считаю приоритетным.
Для того чтобы связать их между собой, буду использовать двусвязный список:
Что будет если объединить ArrayList и LinkedList? - 1

Читать полностью »

Предыстория

Так сложилось, что уже пять лет мой раздел ntfs с операционной системой Windows располагается на рамдиске. Решено это не аппаратным, а чисто программным способом, доступным на любом ПК с достаточным количеством оперативной памяти: рамдиск создается средствами загрузчика grub4dos, а Windows распознаёт его при помощи драйвера firadisk.

Однако до недавнего времени мне не был известен способ, как реализовать подобное для Linux. Нет, безусловно, существует огромное количество линуксовых LiveCD, загружающихся в память при помощи опций ядра toram, copy2ram и т. д., однако это не совсем то. Во-первых, это сжатые файловые системы, обычно squashfs, поэтому любое чтение с них сопровождается накладными расходами на распаковку, что вредит производительности. Во-вторых, это достаточно сложная каскадная система монтирования (так как squashfs — рид-онли система, а для функционирования ОС нужна запись), а мне хотелось по возможности простого способа, которым можно «вот так взять и превратить» любой установленный на жесткий диск Linux в загружаемый целиком в RAM.

Ниже я опишу такой способ, который был с успехом опробован. Для опытов был взят самый заслуженный дистрибутив Linux — Debian.
Читать полностью »

Приветствую Вас!

ArrayList и LinkedList — знают все. В каких ситуациях работает быстро, а в какой ситуации работает медленной тот или другой список — знают тоже все, кто в теории, а кто на практике. Данный пост подходит для тех, кто только начинает изучать Java, или кто слышал, о том «что быстрее», но не видел на практике.
Читать полностью »

Если ты много времени проводишь в одном и том же окружении — рано или поздно возникает желание начать как-то экономить свое время и оптимизировать свои действия. В этой статье речь пойдет о некоторых рабочих инструментах и подходах, которые накопились у меня за время программирования под iOS в IDE XCode от очевидных и часто применимых, до редких и довольно тяжеловесных.

Читать полностью »

Для кого написана эта статья

Автор не будет пытаться научить читательа всяческим штучкам. Равно как и показать что-то новое, старое и убедить кого-то что-то использовать. Поводом для написания послужили вынужденные оптимизации скорости работы медленного кода. Оказалось, что медленно он работает именно из-за «Магических» методов в моем контексте. Поискав, автор не нашел четкой информации, как медленно работают магические методы — все, что нашел автор просто «медленнее», поэтому пришлось получать результаты самостоятельно. Так посмотрим же на все это с точки зрения сухой статистики!

Читать полностью »

В данном небольшом посте я бы хотел поделиться своими мыслями насчёт скорости работы скриптов/программ, которые мы с вами пишем каждый день и обратить внимание на то, сколько «невидимой» работы совершается при выполнении привычных действий.

Выполнение SQL-запросов

Все знают, что работа с SQL обычно является одной из самых медленных компонентов любого сайта. Есть ли какие-то объективные причины для этого? Действительно ли базы данных такие медленные и срочно нужно переходить на NoSQL :)? Давайте посмотрим.

Создадим тестовую табличку в MySQL и наполним её 1 млн записей:

Код на PHP!

<?php
mysql_connect(...) or die("Cannot connectn");
mysql_select_db(...) or die("Cannot select DBn");

mysql_query('CREATE TABLE IF NOT EXISTS `one_million` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `one` int(11) NOT NULL,
  `two` int(11) NOT NULL,
  `three` int(11) NOT NULL,
  `four` int(11) NOT NULL,
  `five` int(11) NOT NULL,
  `six` int(11) NOT NULL,
  `seven` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB') or die("Cannot create tablen");

for ($i = 0; $i < 1000000; $i++) {
if ($i % 1000 === 999) echo "Done $in";
mysql_query('INSERT INTO one_million VALUES(NULL, ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ')');
}

// Да, код не использует batch insert, а также использует устаревшее, но до сих пор работающее расширение mysql

Давайте теперь выполним какой-нибудь простенький запрос, который прочитает нам 1 млн записей:

SELECT COUNT(*) FROM one_million WHERE three = 333

На моем компьютере запрос выполнился за 200 мс! Таким образом, можно заключить, что InnoDB в состоянии просмотреть около 5 млн записей за 1 секунду! Давайте подумаем, где же на веб-сайтах может потребоваться просматривать столько записей на одну страницу :)? На моей прошлой работе я принудительно выставил ограничение в 20 000 просмотренных строк на все SQL-запросы, и после вычищения всех «тормозных» мест время открытия страницы упало в 5 раз!
Читать полностью »

В старых версиях Android некоторые системные компоненты и JVM активно считывали большие объёмы случайных чисел из псевдоустройства /dev/random. Это устройство предоставляет интерфейс к системному генератору случайных чисел (ГСЧ), который выводит шумы из драйверов устройств и других источников в «хаотичный» пул. На старых версиях Android иногда возникали проблемы с наполнением пула случайных чисел. В случае опустошения пула возникали лаги UI, пока пул не наполнялся. В новых версиях Android проблему с лагами UI решили, но не до конца: всё-таки иногда возникают характерные задержки.

Многие пользователи считали, что лаги интерфейса объясняются недостаточной производительностью CPU, на самом деле это не так.

Один из разработчиков с форума XDA-Developers перекомпилировал rngd, так что пул случайных чисел каждую 1 секунду пополняется из пула псевдослучайных чисел /dev/urandom. Результат — потрясающее ускорение интерфейса Android с почти полным исчезновением лагов! Chrome, карты и другие тяжеловесные приложения теперь мгновенно переключаются между задачами.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js