- Оригинальный адрес:Why should you learn Go?
- Оригинальный автор:Keval Patel
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:todaycoder001
- Корректор:TokenJan,JackEggie
Зачем вам изучать Го?
"Go will be the server language of the future.” — Тобиас Лютке, Shopify
За последние несколько лет появился новый язык:Перейти или GoLang. Ничто так не волнует разработчиков, как новый язык программирования, так ведь я начал изучать Go 4-5 месяцев назад. Здесь я расскажу вам, почему вы должны выучить этот новый язык.
В этой статье я не собираюсь учить вас, как написать «Hello World!!». Есть много других статей в Интернете, которые научат вас. **Я объясню текущее состояние разработки аппаратного и программного обеспечения и почему мы должны изучать новый язык, такой как Go? **Потому что, если нет проблем, нам не нужны решения, не так ли?
Аппаратные ограничения
Закон Муратерпит неудачу.
Корпорация Intel вЗапущен в 2004 г.Первый процессор Pentium 4 с тактовой частотой 3,0 ГГц. Теперь мойМакбук Про 2016 годаТактовая частота составляет 2,9 ГГц. Таким образом, в течение почти десяти лет не было значительного увеличения вычислительной мощности. Вы можете увидеть увеличение вычислительной мощности в зависимости от времени на графике ниже.
Как видно из приведенной выше диаграммы, однопоточная производительность и частота процессора оставались почти постоянными в течение почти десяти лет. Если вы думаете, что добавление дополнительных транзисторов является решением проблемы, вы ошибаетесь. Это связано с тем, что в микроскопическом масштабе начинают проявляться квантовые свойства (например, квантовое туннелирование), и чем больше транзисторов вы вставите, тем дороже это будет (Зачем?), и количество транзисторов, которые можно добавить за доллар, также начинает снижаться.
Таким образом, решение вышеуказанной проблемы выглядит следующим образом:
- Производители стали добавлять в процессоры все больше и больше ядер. Сегодня у нас уже есть четырехъядерные и восьмиядерные процессоры.
- Мы также внедрили технологию гиперпоточности.
- Добавьте больше кеша в процессор, чтобы повысить производительность.
Однако вышеперечисленные схемы также имеют свои ограничения. Мы не можем добавить больше кеша в процессор для повышения производительности, потому что у кеша есть физический предел: чем больше кеш, тем он медленнее. Добавление большего количества ядер к процессору также имеет свою стоимость. Кроме того, это не масштабируется бесконечно. Эти многоядерные процессоры могут одновременно запускать несколько потоков, а также обеспечивают возможности параллелизма. Мы обсудим это позже.
Поэтому, если мы не можем полагаться на аппаратные улучшения, единственный выход — найти эффективное программное обеспечение для повышения производительности, но, к сожалению, современные языки программирования не так эффективны.
"Современные процессоры похожи на дрэг-кар с системой разгона найтрокс, они превосходны в дрэг-гонках. К сожалению, современные языки программирования похожи на трассу Монте-Карло, у них много поворотов." -David Ungar
В Go есть горутины! !
Как упоминалось выше, поставщики оборудования добавляют в процессоры больше ядер для повышения производительности. Все центры обработки данных работают на этих процессорах, и в ближайшие несколько лет следует ожидать роста числа ядер. Что еще более важно, современные приложения используют несколько микросервисов для поддержки подключений к базе данных, очередей сообщений и обслуживания кэша. Поэтому мы разрабатываем программное обеспечение и языки программирования, которые легче поддерживают параллелизм, и они должны масштабироваться по мере роста количества ядер.
Но большинство современных языков программирования (таких как Java, Python и т. д.) пришли из однопоточной среды 90-х. Большинство этих языков поддерживают многопоточность. Но настоящая проблема заключается в параллельном выполнении, блокировках потоков, условиях гонки и взаимоблокировках. Эти проблемы затрудняют создание многопоточного приложения на этих языках.
Например, создание новых потоков в Java потребляет много памяти. Поскольку каждый поток потребляет около 1 МБ памяти кучи, если вы запустите тысячи потоков, они окажут огромное давление на кучу и в конечном итоге выйдут из строя из-за нехватки памяти. Кроме того, это очень сложно, если вы хотите общаться между двумя или более потоками.
С другой стороны, Go был выпущен в 2009 году, когда уже были доступны многоядерные процессоры. Вот почему Go был создан с учетом параллелизма. Go заменяет потоки горутинами, которые потребляют около 2 КБ памяти из кучи. Таким образом, вы можете запускать миллионы горутин в любое время.
Другие преимущества:
- Горутина имеет сегментированный стек, который может увеличиваться, что означает, что она будет использовать больше памяти только тогда, когда это необходимо.
- Горутины запускаются быстрее, чем потоки.
- Горутины поставляются со встроенными примитивами для безопасной связи между ними (каналами).
- Горутины позволяют избежать блокировок мьютексов при совместном использовании структур данных.
- Кроме того, нет сопоставления 1:1 между горутинами и системными потоками. Одна горутина может работать в нескольких потоках. Горутины также могут быть мультиплексированы в небольшое количество системных потоков.
У вас может быть отличный разговор Роб ПайкПараллелизм — это не параллелизмполучить более глубокое понимание.
Вышеупомянутые пункты позволяют Go иметь мощные возможности параллельной обработки, такие как Java, C или C++, и в то же время, на основе обеспечения строгости параллельного выполнения кода, он так же прекрасен, как Erlang.
Go работает непосредственно на базовом оборудовании
По сравнению с другими современными языками высокого уровня, такими как Java/Python, самым большим преимуществом использования C, C++ является его производительность, поскольку C/C++ является компилируемым языком, а не интерпретируемым языком.
Процессор понимает бинарные файлы. Вообще говоря, когда вы компилируете приложение, созданное на Java или других языках на основе JVM, оно компилирует удобочитаемый код в байтовый код, который может использоваться JVM или другими виртуальными машинами, работающими поверх понятной базовой операционной системы. При выполнении виртуальная машина интерпретирует эти байт-коды и преобразует их в двоичные файлы, понятные процессору.
С другой стороны, C/C++ не выполняется на виртуальной машине, и удаление (компиляция в байтовый код) этого шага из цикла выполнения повышает производительность. Он компилирует удобочитаемый код непосредственно в двоичный файл.
Однако освобождение и выделение переменных в этих языках — мучительная боль. Хотя большинство языков программирования используют сборщики мусора или алгоритмы подсчета ссылок для обработки выделения и удаления объектов.
Go делает лучшее из обоих миров, Go — компилируемый язык, как и некоторые низкоуровневые языки (например: C/C++), что означает, что его производительность почти близка к низкоуровневым языкам, он также использует сборку мусора для выделения памяти и удалять объекты. Так что больше никаких объявлений malloc() и free()! ! ! Это так круто! ! !
Код, написанный на Go, легко поддерживать
Позвольте мне сказать вам одну вещь: Go не без ума от синтаксиса программирования, как другие языки, его синтаксис очень чистый.
Дизайнеры Go имели это в виду, когда Google создавал язык, и, поскольку Google имеет очень сильную кодовую базу с тысячами разработчиков, работающих над одной и той же кодовой базой, код должен быть простым для других разработчиков. Поймите, что один фрагмент кода должен иметь минимальное влияние на другой кусок кода. Это упростит поддержку и модификацию кода.
Go намеренно игнорирует некоторые особенности многих современных объектно-ориентированных языков.
- Классов нет.Весь код разделен только пакетами, а в Go только структуры, а не классы.
- Наследование не поддерживается.Это упростит модификацию кода. В других языках, таких как: Java/Python, если класс ABC наследует класс XYZ и вы вносите некоторые изменения в класс XYZ, то это может иметь некоторые побочные эффекты в других классах, наследующих класс XYZ. Удалив наследование, Go также упрощает понимание кода.(потому что, когда вы смотрите на фрагмент кода, вам не нужно одновременно смотреть на родительский класс).
- Конструктора нет.
- Никаких аннотаций.
- Генериков нет.
- Без исключений.
Эти изменения сильно отличают Go от других языков, что делает программирование на Go очень отличным от других языков. Вам могут не понравиться некоторые из вышеперечисленных пунктов. Однако это не означает, что вы не можете написать код без этих функций. Все, что вам нужно сделать, это написать еще несколько строк кода, но, с другой стороны, это сделает ваш код более понятным и добавит ясности вашему коду.
Как вы можете видеть на изображении выше, Go почти так же эффективен, как C/C++, сохраняя при этом краткий синтаксис кода, как Ruby, Python и некоторые другие языки, что является беспроигрышным как для людей, так и для процессоров! ! !
В отличие от этих более новых языков, таких как Swift, синтаксис Go очень стабилен. Он остался неизменным и имеет обратную совместимость с момента первого общедоступного выпуска версии 1.0 в 2012 году.
Go одобрен Google
- Я знаю, что это не прямое техническое преимущество, но Go был разработан и поддерживается компанией Google, которая имеет одну из крупнейших облачных инфраструктур в мире, и она огромна. Google разработал Go для решения проблем масштабируемости и эффективности. Это вопросы, которые возникают у всех нас при создании собственного сервера.
- Go также используется некоторыми крупными компаниями, такими как Adobe, BBC, IBM, Intel и дажеMedium.(источник:GitHub.com/gowaves/go/me…)
в заключении
- Хотя Go сильно отличается от других объектно-ориентированных языков, он также оказал огромное влияние. Go обеспечивает высокую производительность, как C/C++, эффективную параллельную обработку, как Java, и удовольствие от написания кода, как Python/Perl.
- Если у вас нет планов изучать Go, я бы все равно сказал, что аппаратные ограничения давят на нас, и разработчики программного обеспечения должны писать суперэффективный код. Разработчики должны понимать аппаратное обеспечение и соответствующим образом оптимизировать свои программы.Оптимизированное программное обеспечение может работать на более дешевых или медленных машинах (например,Интернет вещейустройства) и лучше влияют на работу конечного пользователя в целом.
~ Если вам понравилась эта статья, нажмите 💚 ниже, чтобы ее увидело больше людей! Кроме того, вы также можетеMediumилимой блогПодпишитесь на меня, чтобы быть в курсе статей о Go! ! ~
использованная литература
- GoLang или будущее разработчиковОтEdoardo Paolo Scalafiotti
- Написание серверов следующего поколения на Go
- Параллелизм — это не параллелизм by Rob Pike
- Зачем идти?
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из ИнтернетаНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллекти другие поля, если вы хотите видеть больше качественных переводов, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.