В мире слишком много языков программирования, зачем еще один язык Go?
Аппаратные ограничения: закон Мура не работает
Закон Мура: когда цена остается неизменной, количество компонентов, которые можно разместить на интегральной схеме, будет удваиваться примерно каждые 18–24 месяца, а производительность также удвоится. Другими словами, производительность компьютера, которую можно купить за каждый доллар, будет более чем удваиваться каждые 18–24 месяца.
Как видно из диаграммы выше, однопоточная производительность и частота процессора оставались стабильными в течение последнего десятилетия. Мы не можем рассматривать добавление большего количества транзисторов в качестве решения, как раньше, потому что некоторые квантовые свойства начинают проявляться в меньших масштабах (например, туннелирование), и потому что очень дорого размещать больше транзисторов в одном и том же небольшом пространстве, каждый. то, что можно добавить за 1 доллар, начинает падать.
Производители начинают повышать производительность процессора другими способами:
- Добавлять все больше и больше ядер в процессоры, например четырехъядерные и восьмиядерные процессоры.
- Была изобретена технология Hyper-Threading.
- Добавлено больше кеша в процессор для повышения производительности.
Но вышеупомянутые решения также имеют свои ограничения. Из соображений стоимости мы не можем добавить к компьютеру неограниченное количество ядер, а также не можем добавить неограниченное количество кешей для повышения производительности, поскольку чем больше размер кеша, тем ниже производительность значения.
Мы не всегда можем совершать прорывы в оборудовании, нам нужно повышать производительность программного обеспечения или нам нужно высокопроизводительное программное обеспечение.
Язык Go был создан для параллелизма
Как упоминалось выше, производители оборудования добавляют в процессоры все больше и больше ядер для повышения производительности. Все центры обработки данных работают на этих процессорах, и, что более важно, современные приложения используют несколько микросервисов для обслуживания соединений с базами данных, очередей сообщений и обслуживания кэшей. Поэтому разрабатываемое программное обеспечение и языки программирования должны легко поддерживать параллелизм и иметь возможность масштабироваться по мере увеличения числа ядер ЦП.
Однако большинство современных языков программирования (таких как Java, Python и т. д.) пришли из однопоточной среды 90-х. Хотя некоторые фреймворки языков программирования постоянно улучшают эффективность использования многоядерных ресурсов, например Netty в Java и т. д., разработчикам по-прежнему нужно тратить много времени и сил, чтобы понять принципы работы этих фреймворков, прежде чем они смогут их освоить.
GO был выпущен в 2009 году, и в нем указан многоядерный процессор. Язык Go имеет преимущество собственной конструкции в многоядерности, и язык Go одновременно поддерживается базовой собственной поддержкой, поэтому нет необходимости в сторонних библиотеках, навыках программирования и опыте разработки разработчиков.
Многие компании, особенно китайские интернет-компании, собираются или уже завершили процесс модернизации старых систем с помощью языка Go. Система, реорганизованная в Go, может обеспечить более высокую производительность параллелизма и ввода-вывода с меньшими аппаратными ресурсами. Полное использование потенциала аппаратного оборудования также соответствует текущей рыночной среде усовершенствованных операций.
Параллелизм в Go основан наgoroutine
из,goroutine
Похоже на потоки, но не потоки. можетgoroutine
Под ним понимается своего рода виртуальный поток. Среда выполнения языка Go будет участвовать в планированииgoroutine
, и воляgoroutine
Разумное распределение для каждого ЦП для максимального использования производительности ЦП. открыть одинgoroutine
Очень маленькое потребление (около 2Кб памяти), можно легко создавать миллионы миллионовgoroutine
.
goroutine
специальность:
-
goroutine
Имеет растущий сегментированный стек. Это означает, что они используют больше памяти только тогда, когда это необходимо. -
goroutine
Время запуска быстрее, чем потоки. -
goroutine
Встроенная поддержка безопасного общения с использованием каналов. -
goroutine
Мьютексы не нужно использовать при совместном использовании структур данных.
Го мощный
Самым большим преимуществом использования C, C++ является их производительность по сравнению с другими современными языками высокого уровня, такими как Java/Python. Потому что C/C++ — это компилируемый язык, а не интерпретируемый. Процессоры могут понимать только двоичные файлы.Языки высокого уровня, такие как Java и Python, должны при запуске переводить удобочитаемые коды в байт-коды, а затем преобразовывать их в двоичные файлы, которые процессоры могут понять с помощью специализированных интерпретаторов.Подобно C и C++, язык Go также является компилируемым языком, он напрямую компилирует удобочитаемый код в двоичные файлы, которые могут напрямую запускаться процессором, с более высокой эффективностью выполнения и лучшей производительностью.Источники данных:Бенчмарк — game-team.pages.Debian.net/benchmark — это…
Видно, что язык Go по производительности ближе к языку Java.Хотя он и не так хорош, как многолетний оптимизированный в некоторых тестовых случаях язык Java, все-таки язык Java пережил годы накопления и оптимизация. Язык Go улучшит производительность одноядерного процессора за счет непрерывной оптимизации версий в будущих версиях.
Язык Go легко выучить
Синтаксис прост
Язык Go прост в изучении, имеет плоскую кривую обучения и не требует двух-трехлетнего периода обучения, как язык C/C++. Язык Go называют «языком C эпохи Интернета». Стиль языка Go подобен стилю языка C. Его синтаксис был значительно упрощен на основе языка C, а ненужные скобки выражений удалены, а цикл имеет только один метод представления, который может реализовывать различные обходы, такие как числовые значения и значения ключей.
Единый стиль кода
Язык Go предоставляет набор инструментов форматирования —go fmt
. Некоторые среды разработки или редакторы языка Go будут использовать инструменты форматирования для форматирования измененного кода при сохранении, что гарантирует, что код, отправленный разными разработчиками, будет иметь единый формат. (Тукао: Не беспокойтесь об этой черной магии, которую вы больше не можете понять...)
Высокая эффективность разработки
Язык Go обеспечивает идеальное сочетание эффективности разработки и эффективности выполнения, позволяя вам писать код C (производительность) точно так же, как код Ruby (эффективность).
Лучший язык в передовых областях
Docker, Kubernetes, Istio, etcd, prometheus почти все облачные нативные компоненты реализованы на Go
Перспектива изучения языка Go
В настоящее время язык Go широко используется в искусственном интеллекте, разработке облачных вычислений, виртуализации контейнеров, разработке больших данных, анализе данных и научных вычислениях, разработке эксплуатации и обслуживания, разработке сканеров, разработке игр и других областях.
Язык Go прост и удобен в освоении, а также по своей природе поддерживает параллелизм, что идеально соответствует современной экологии Интернета с высокой степенью параллелизма. Спрос на работу с языком Go продолжает расти, и в настоящее время число программистов Go невелико, а зарплата хорошая.
Воспользуйтесь трендом и научитесь быть лидером, а не последователем.
На следующем рисунке показан пример компании, использующей язык Go:
Помимо вышеперечисленных иностранных производителей, многие отечественные компании также используют язык Go (ByteDance, Tencent, Ali, Baidu, 360, Qiniuyun...), а многие компании используют язык Go в качестве основного языка разработки.