Предисловие
Как разработчик или администратор сети, вы являетесь первым, к кому обращаются клиенты, когда возникают проблемы с производительностью. Вы должны сделать так, чтобы клиенты были довольны, но жалобы отнюдь не облегчают вашу работу. Однако, вооружившись методами и опциями, представленными в этой практической книге, вы сможете выявлять и устранять проблемы еще до того, как ваши клиенты заметят это! Я познакомлю вас с некоторыми из основных элементов, влияющих на производительность приложений, а затем предоставлю вам информацию об инструментах с открытым исходным кодом, используемых для мониторинга, чтобы выявить любую из этих проблем.
Кроме того, я покажу, как использовать инструменты повышения производительности для анализа поведения приложений в различных средах и определения потенциальных конфликтов. Все обсуждаемые инструменты находятся в свободном доступе, что избавляет от необходимости покупать новое дорогостоящее оборудование и пакеты для тестирования программного обеспечения. Однако я думаю, что для общего развития вы также можете обратить внимание на коммерческие продукты в этой сфере. Кроме того, я предоставлю вам четкие инструкции по установке и правильному использованию каждого из них.
С помощью этого полного набора инструментов вы узнаете, как поддерживать максимальную производительность ваших проектов. Вы получите необходимые навыки, чтобы:
- Определять причину проблем с производительностью, как в боевых условиях, так и в процессе разработки.
- Выявлять узкие места в вашем проекте.
- Устанавливать, настраивать и использовать различные инструменты с открытым исходным кодом.
- Проводить мониторинг и делать правильные выводы на основе метрик производительности для постановки конкретных задач.
- Использовать эмуляторы и симуляторы, чтобы увидеть, как будут работать приложения при различных условиях эксплуатации.
Эта книга появилась в результате моей попытки устроится на работу в компанию 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.
С Уважением, Дудочкин Виктор.