Грядет Go 1.20, взгляните на изменения — часть 3

предисловие

Официальная команда Go выпустила версию Go 1.20 rc1 (кандидат на выпуск) 2022.12.08, а официальный выпуск версии Go 1.20 ожидается в феврале 2023 года.

Давайте бросим беглый взгляд и посмотрим, какие изменения принесет нам Go 1.20.

способ установки:

$ go install golang.org/dl/go1.20rc1@latest
$ go1.20rc1 download

Это третья часть подробного объяснения содержания обновления версии Go 1.20. Вы можете обратить внимание на официальный аккаунт и вовремя получить последнее обновление этой серии.

Контрольный список выпуска Go 1.20

По сравнению с Go 1.19 изменения умеренные, в основном затрагивающие язык (Language), переносимость (Ports), цепочку инструментов (Go Tools), среду выполнения (Runtime), компилятор (Compiler), ассемблер (Assembler), ссылку Оптимизация компоновщика и ядра библиотека.

Первая статья в основном посвящена оптимизации Go 1.20 с точки зрения языка и переносимости.Исходная текстовая ссылка: Go 1.20 Version Upgrade Content Part 1 .

Вторая часть в основном связана с оптимизацией команд Go и цепочек инструментов Ссылка на исходный текст: Go 1.20 version update content part 2 .

Эта статья посвящена оптимизации Go 1.20 в среде выполнения, компиляторе, ассемблере и компоновщике.

Время выполнения

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

Если вы хотите узнать, что такое распределение памяти арены, вы можете обратиться к: https://github.com/golang/go/issues/51317.

Если распределение памяти по области используется правильно, это может повысить производительность ЦП до 15 % для приложений, требующих частого выделения памяти.

Способ использования заключается в добавлении GOEXPERIMENT=arenasпараметров . Если он есть в коде import arena, вам также нужно добавить этот параметр компиляции.

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

Go 1.20 также добавляет новый runtime/coverageпакет. Вызов API этого пакета может вывести данные о покрытии кода запущенной программы в указанный файл.

Компилятор

Go 1.20 добавляет функцию PGO (оптимизация на основе профиля), которая может помочь разработчикам оптимизировать производительность программы.

В настоящее время компилятор поддерживает профили ЦП pprof, и этот тип профиля можно получить, например, через runtime/pprofcollection net/http/pprof.

Если вы хотите включить PGO, go buildвам нужно добавить параметры при использовании компилятора -pgo. -pgoУказывает путь к файлу профиля. Если это так -pgo=auto, команда go найдет файл, указанный в пути к основному пакету default.pgo. -pgo=offОптимизацию можно отключить. Для получения подробной информации см.: Предложение PGO .

Если используется PGO, компилятор будет использовать больше встроенных функций для оптимизации производительности вызываемых функций.

Тест производительности показывает, что если включена оптимизация встраивания на основе профиля, производительность может быть улучшена на 3-4%, а позже Go добавит больше поддержки оптимизации PGO.

Обратите внимание: поскольку PGO не является стабильной версией, будьте осторожны при ее использовании в производственной среде.

Кроме того, начиная с Go 1.20 компилятор запрещает вложение анонимных интерфейсов, и следующий код не скомпилируется.

type I interface {
    
    
  m() interface {
    
    
    I 
  }
}

Линкер

В среде Linux компоновщик выберет динамический интерпретатор для glibcили во время операции компоновки .musl

В Windows компоновщик теперь поддерживает цепочки инструментов C на основе LLVM.

Начиная с версии 1.20 Go, используйте go:и type:в качестве префикса для символов, сгенерированных компилятором, и откажитесь от использования go.и type.в качестве префикса.

Это поможет избежать двусмысленности, поскольку имена некоторых пакетов go go.начинаются с .

Начальная загрузка

Если вы хотите скомпилировать исходный код самого языка Go, вы должны установить GOROOT_BOOTSTRAPпеременные среды.

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

Предполагая, что GOROOT_BOOTSTRAPпеременная среды не установлена, Go 1.17 и более ранние версии попытаются найти Go 1.4 или более новую цепочку инструментов начальной загрузки $HOME/go1.4( в Windows).%HOMEDRIVE%%HOMEPATH%\go1.4

Go 1.18 и Go 1.19 сначала будут искать $HOME/go1.17или $HOME/sdk/go1.17, а если не найдут резервный вариант $HOME/go1.4.

Чтобы Go 1.20 реализовал загрузку, он должен полагаться на последнюю подверсию Go 1.17, которая является версией Go 1.17.13.

Go 1.20 будет искать сначала $HOME/go1.17.13или $HOME/sdk/go1.17.13, если не найдет, откатится $HOME/go1.4.

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

Подведем итог

В следующей статье будет представлена ​​работа по оптимизации Go 1.20 в основной библиотеке.Есть некоторые вещи, которые стоит изучить, и вы можете следить за обновлениями.

рекомендуемое чтение

адрес с открытым исходным кодом

Статьи и примеры кода с открытым исходным кодом доступны на GitHub: Go Language Beginner, Intermediate и Advanced Tutorials .

Официальный аккаунт: расширенное кодирование. Подпишитесь на официальную учетную запись, чтобы получать последние вопросы интервью Go и стек технологий.

Персональный сайт: Блог Цзиньчэна .

Чжиху: Уцзи .

Благосостояние

Я собрал для вас подарочный набор учебных материалов по бэкенд-разработке, включая введение в языки программирования для углубленного изучения (Go, C++, Python), стек технологий бэкенд-разработки, вопросы для интервью и т. д.

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

Рекомендации

  • https://tip.golang.org/doc/go1.20

Guess you like

Origin blog.csdn.net/perfumekristy/article/details/128435203