Предисловие

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

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

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

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

Эта книга появилась в результате моей попытки устроится на работу в компанию Dolby Laboratories, Inc.

В процессе чтения, вы сможете увидеть примеры использования таких языков программирования как C/C++, Rust, Swift, Go, Java, Dart, Javasript и других.

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

Мне не хотелось бы, чтобы рубили деревья с целью получить выгоду от бумажной копии этой книги. Я надеюсь что будет существовать только её электронная копия, которую вы всегда сможете прочитать или скачать по адресу https://dudochkin-victor.github.io/performance-profiling/

Об Авторе

Я специалист в области компьютерных технологий с 25+ летним опытом. В основном я занимаюсь программированием на всех востребованных рынком языках.

Я начал программировать в 18. Увидев мой интерес к компьютерам, мои замечательные родители, купили мне ZX Spectrum. Вдоволь наигравшись в компьютерные игры, я понял что нужно что-то делать. И когда в одном из фильмов я увидел световое перо, у меня возникла идея собрать его самостоятельно. Ведь у меня начальное художественное образование.

Я попросил свою маму принести мне с работы фоторезистор.

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

Первым языком я изучил Бэйсик. И первую программу я написал на нем.

Но это была моя первая настоящая программа на Ассемблере. Код работал идеально, но кто-же знал что "черный экран Электронной Лучевой Трубки испускает чрезмерное излучение для оптопары".

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

Windows был очевидным выбором для хомячка в конце 90-х. Помните фильм "Хакеры" с Анджелиной Джоли. И если внимательно смотреть то можно увидеть консоль, SSH-сессию и всякое такое.

Вот вы в конце 90-х часто коннектились по SSH к удаленному серверу? Ну согласитесь же интересно?

Вообщем я поджал раздел файловой системы Windows и начал свой путь в Linux. Чего только я не перепробовал - RedHat, Fedora, Mandriva, Debian, FreeBSD, OpenBSD и другие, включая Solaris. Знакомство с UNIX кончилось инициативой - "не загружать Windows в течении месяца, и потом принять решение".

Хватит знакомится, пора использовать по максимуму

Вообщем с 2004-го года у меня только Gentoo. Вот как поставил в 2004-м, так и работает.

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

Когда появилась Nodejs - это было круто

Писать на одном языке и клиент и сервер, и при этом это серьезно превосходит по производительности все остальное. У меня были отличные проекты на Nodejs и Mysql, несколько сайтов, система морфологического анализа, я писал свои расширения для ноды (yandex-money...) и делал пулреквесты в существующие (libxmljs...).

И это всё - тоже про производительность. Тебе не надо изучать несколько языков, пиши только на JavaScript.

Что еще рассказать, историй хватит на небольшую книжку.

Мне нравится изучать все новое

  • Однажды пришлось освоить разработку под Android (SDK+NDK), потом был iOS (ObjC/Swift), MacOSX (ObjC/Swift).

  • Помню занимался Digital Signal Processing (DSP), нужно было речь человека превратить в мяукание.

  • Занимался Natural Language Processing (NLP), портировал свой модуль морфологии с Nodejs на Golang.

  • Хотел позаниматься SEO-оптимизацией контента. RAKE - хороший алгоритм, но перфекционизм взял свое и я посчитал TF/IDF всей Википедии на 6 языках.

    Когда считал TF/IDF, то возникли проблемы с памятью, Go не эффективно ее высвобождал.

Поэтому я изучил Rust

Я считаю этот язык одним из самых важных. Если представить его как язык для общения, то Rust - наверное один из самых выразительных языков в мире, такой же как Русский в контексте мировой литературы.

Rust дает уверенность в качестве кода, при этом позволет получить максимальную производительность и стабильность в боевых условиях. Я не могу сказать что написав код на C/C++ вы создадите что-то хуже чем на Rust. Но я также не могу сказать, что вы сделаете это лучше.

Сейчас в зону моих интересов также входит блокчейн, Deep Learning, OpenCL и Cuda.

Пожелания от автора

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

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

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

Однако я всетаки оставляю за собой право модерировать этот репозиторий на github и сообщество в Reddit.

Также вам нужно знать о принятой мной лицензии CC0 1.0 Universal на этот материал. Дополнительный код конечных продуктов находится под лицензией GNU General Public License v3.0 в ветке main.

С Уважением, Дудочкин Виктор.