Время рождает героев, а Интернету нужен язык Go

задняя часть Go
Время рождает героев, а Интернету нужен язык Go

В мире слишком много языков программирования, зачем еще один язык Go?

Аппаратные ограничения: закон Мура не работает

Закон Мура: когда цена остается неизменной, количество компонентов, которые можно разместить на интегральной схеме, будет удваиваться примерно каждые 18–24 месяца, а производительность также удвоится. Другими словами, производительность компьютера, которую можно купить за каждый доллар, будет более чем удваиваться каждые 18–24 месяца.

img

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

Производители начинают повышать производительность процессора другими способами:

  1. Добавлять все больше и больше ядер в процессоры, например четырехъядерные и восьмиядерные процессоры.
  2. Была изобретена технология Hyper-Threading.
  3. Добавлено больше кеша в процессор для повышения производительности.

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

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

Язык Go был создан для параллелизма

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

Однако большинство современных языков программирования (таких как Java, Python и т. д.) пришли из однопоточной среды 90-х. Хотя некоторые фреймворки языков программирования постоянно улучшают эффективность использования многоядерных ресурсов, например Netty в Java и т. д., разработчикам по-прежнему нужно тратить много времени и сил, чтобы понять принципы работы этих фреймворков, прежде чем они смогут их освоить.

GO был выпущен в 2009 году, и в нем указан многоядерный процессор. Язык Go имеет преимущество собственной конструкции в многоядерности, и язык Go одновременно поддерживается базовой собственной поддержкой, поэтому нет необходимости в сторонних библиотеках, навыках программирования и опыте разработки разработчиков.

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

Параллелизм в Go основан наgoroutineиз,goroutineПохоже на потоки, но не потоки. можетgoroutineПод ним понимается своего рода виртуальный поток. Среда выполнения языка Go будет участвовать в планированииgoroutine, и воляgoroutineРазумное распределение для каждого ЦП для максимального использования производительности ЦП. открыть одинgoroutineОчень маленькое потребление (около 2Кб памяти), можно легко создавать миллионы миллионовgoroutine.

goroutineспециальность:

  1. goroutineИмеет растущий сегментированный стек. Это означает, что они используют больше памяти только тогда, когда это необходимо.
  2. goroutineВремя запуска быстрее, чем потоки.
  3. goroutineВстроенная поддержка безопасного общения с использованием каналов.
  4. goroutineМьютексы не нужно использовать при совместном использовании структур данных.

Го мощный

Самым большим преимуществом использования C, C++ является их производительность по сравнению с другими современными языками высокого уровня, такими как Java/Python. Потому что C/C++ — это компилируемый язык, а не интерпретируемый. Процессоры могут понимать только двоичные файлы.Языки высокого уровня, такие как Java и Python, должны при запуске переводить удобочитаемые коды в байт-коды, а затем преобразовывать их в двоичные файлы, которые процессоры могут понять с помощью специализированных интерпретаторов.-w839Подобно C и C++, язык Go также является компилируемым языком, он напрямую компилирует удобочитаемый код в двоичные файлы, которые могут напрямую запускаться процессором, с более высокой эффективностью выполнения и лучшей производительностью.-w1112Источники данных:Бенчмарк — game-team.pages.Debian.net/benchmark — это…

Видно, что язык Go по производительности ближе к языку Java.Хотя он и не так хорош, как многолетний оптимизированный в некоторых тестовых случаях язык Java, все-таки язык Java пережил годы накопления и оптимизация. Язык Go улучшит производительность одноядерного процессора за счет непрерывной оптимизации версий в будущих версиях.

Язык Go легко выучить

Синтаксис прост

Язык Go прост в изучении, имеет плоскую кривую обучения и не требует двух-трехлетнего периода обучения, как язык C/C++. Язык Go называют «языком C эпохи Интернета». Стиль языка Go подобен стилю языка C. Его синтаксис был значительно упрощен на основе языка C, а ненужные скобки выражений удалены, а цикл имеет только один метод представления, который может реализовывать различные обходы, такие как числовые значения и значения ключей.

Единый стиль кода

Язык Go предоставляет набор инструментов форматирования —go fmt. Некоторые среды разработки или редакторы языка Go будут использовать инструменты форматирования для форматирования измененного кода при сохранении, что гарантирует, что код, отправленный разными разработчиками, будет иметь единый формат. (Тукао: Не беспокойтесь об этой черной магии, которую вы больше не можете понять...)

Высокая эффективность разработки

img

Язык Go обеспечивает идеальное сочетание эффективности разработки и эффективности выполнения, позволяя вам писать код C (производительность) точно так же, как код Ruby (эффективность).

Лучший язык в передовых областях

Docker, Kubernetes, Istio, etcd, prometheus почти все облачные нативные компоненты реализованы на Go

Перспектива изучения языка Go

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

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

Воспользуйтесь трендом и научитесь быть лидером, а не последователем.

На следующем рисунке показан пример компании, использующей язык Go:

image-20211209112056682

Помимо вышеперечисленных иностранных производителей, многие отечественные компании также используют язык Go (ByteDance, Tencent, Ali, Baidu, 360, Qiniuyun...), а многие компании используют язык Go в качестве основного языка разработки.

Использование примера использования компании Go language

go.Dev/решения/#…