Цитаты из книги автора Михалис ЦукалосGolang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go (Для профессионалов)
Также помните, что сказал об оптимизации Джо Армстронг, один из разработчиков Erlang: «Сначала сделай так, чтобы это работало, потом сделай так, чтобы оно было красивым, и только потом, если это действительно нужно, сделай так, чтобы оно работало быстро. В 90 % случаев, если ты сделаешь это красивым, оно само по себе будет работать быстро. Поэтому просто сделай это по-настоящему красивым!»
«Сначала сделай так, чтобы это работало, потом сделай так, чтобы оно было красивым, и только потом, если это действительно нужно, сделай так, чтобы оно работало быстро. В 90 % случаев, если ты сделаешь это красивым, оно само по себе будет работать быстро. Поэтому просто сделай это по-настоящему красивым!»
В Go при сборке мусора в корзину область кучи программы можно представить в виде графа Итак, у нас есть три цвета: черный, белый и серый. Когда алгоритм начинает работу, все объекты окрашены в белый цвет. По мере работы алгоритма белые объекты перемещаются в одно из двух остальных множеств: серое или черное. Те объекты, которые останутся в белом множестве, в какой-то момент будут удалены.
Пора обсудить значение каждого из этих цветов. Объекты черного цвета гарантированно не имеют указателей ни на один объект белого цвета. Однако объект белого цвета может иметь указатель на объект черного цвета, поскольку это не влияет на работу сборщика мусора. Объекты серого цвета могут иметь указатели на некоторые объекты белого цвета. Именно объекты белого цвета являются претендентами на удаление.
Параллелизм — это одновременное выполнение нескольких сущностей определенного вида, тогда как конкурентность — способ структурирования компонентов, позволяющий им выполняться независимо, когда это возможно
Процесс — это среда выполнения, в которой содержатся инструкции, пользовательские данные и части системных данных, а также другие типы ресурсов, полученные во время выполнения программы, тогда как сама программа — это файл, в котором содержатся инструкции и данные, используемые для инициализации инструкций и пользовательских данных процесса.
Поток — это меньшая и более легкая сущность, чем процесс или программа. Потоки создаются процессами, имеют собственный процесс управления и стек. Быстрый и простой способ отличить поток от процесса — рассматривать процесс как исполняемый двоичный файл, а поток — как подмножество процесса.
Горутина — это минимальная сущность Go, которая может быть выполнена конкурентно. Использование слова «минимальная» здесь очень важно, поскольку
Глава 5 «Как улучшить код Go с помощью структур данных» посвящена разработке пользовательских структур данных в тех случаях, когда стандартные структуры Go не соответствуют конкретной задаче. Здесь же рассмотрено построение и применение бинарных деревьев, связных списков, пользовательских хеш-таблиц, стеков и очередей, а также их преимущества. В этой главе продемонстрировано использование структур из стандартного пакета Go container, а также показано, как можно использовать Go для проверки головоломок судоку и генерации случайных чисел.