Как стать автором
Обновить
5
0

Пользователь

Отправить сообщение

Многопоточность и параллелизм в Go: Goroutines и каналы

Время на прочтение15 мин
Количество просмотров15K


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

Goroutines, представляющие собой легковесные потоки выполнения, обеспечивают значительные преимущества по сравнению с традиционными потоками, используемыми во многих других языках программирования. Они позволяют создавать тысячи параллельных процессов без значительной нагрузки на системные ресурсы. Каналы в Go, предоставляя мощный механизм для безопасной коммуникации между Goroutines, дополнительно упрощают управление параллельными задачами и обмен данными.
Читать дальше →
Всего голосов 26: ↑22 и ↓4+20
Комментарии12

Что такое горутины и каков их размер?

Время на прочтение7 мин
Количество просмотров44K

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

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

В рамках этого исследования я буду использовать ветку Go 1.14, поэтому все фрагменты кода будут ссылаться на нее.

Читать далее
Всего голосов 11: ↑9 и ↓2+10
Комментарии1

Шпаргалка для собеса по GoLang

Время на прочтение30 мин
Количество просмотров34K

"Правильно заданный вопрос - половина ответа". Осваиваю профессию Prompt Engineering. Это ответы на вопросы. Мопед не мой. Спасибо, Codeium. Не обрабатывал наводящие подвопросы, а надо бы. Но может быть кому-то пригодится и в таком виде.

Читать далее
Всего голосов 19: ↑9 и ↓10+1
Комментарии41

Потрошим golang: как устроена память

Время на прочтение18 мин
Количество просмотров27K


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

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

Единственным надежным решением таких проблем является глубокое погружение в теорию и исследования инструмента, которым решаются поставленные проблемы. В нашем случае таким инструментом является язык Go. И как же замечательно, что исследование его внутренностей — совсем легкое дело. В том числе когда дело касается использования памяти.
Читать дальше →
Всего голосов 50: ↑48 и ↓2+55
Комментарии17

Go's Garbage Collection: как работает и почему это важно знать

Время на прочтение7 мин
Количество просмотров31K

В статье посмотрим на Go Garbage Collector — механизм автоматического освобождения невостребованной памяти приложения в Go. Разберём его устройство и принципы работы.

Читать далее
Всего голосов 22: ↑18 и ↓4+17
Комментарии13

Go Channels Internals

Время на прочтение12 мин
Количество просмотров25K
На Go можно реализовать тысячи goroutine одновременно без больших требований к железу. При этом горутины могут легко и просто обмениваться данными между собой и синхронизироваться с помощью каналов. Но как устроены каналы внутри? Об этом написано не так уж много, а в условиях многопоточки и асинхронного кода хорошо бы не просто работать с каналами, а понимать, как их использовать более практично и эффективно.

Егор Гришечко, старший разработчик в Insolar, разрабатывает блокчейн для b2b сегмента (по сути, стартап), и у команды как раз большая многопоточка и много асинхронного кода. Егор не только разобрался на практике, как работают каналы, что это такое и как они вообще устроены внутри. Он еще рассказал о каналах внутри команды, а потом, увидев интерес, поделился на конференции Golang Conf 2019.

Сегодня мы публикуем расшифровку его доклада.


Читать дальше →
Всего голосов 30: ↑29 и ↓1+40
Комментарии2

14 вопросов об индексах в SQL Server, которые вы стеснялись задать

Время на прочтение26 мин
Количество просмотров1.1M
Индексы — это первое, что необходимо хорошо понимать в работе SQL Server, но странным образом базовые вопросы не слишком часто задаются на форумах и получают не так уж много ответов.
Роб Шелдон отвечает на эти, вызывающие смущение в профессиональных кругах, вопросы об индексах в SQL Server: одни из них мы просто стесняемся задать, а прежде чем задать другие сначала подумаем дважды.


От переводчика
Данный пост является компиляцией двух статей Роба Шелдона:

Если вы пишите запросы на языке T-SQL, но плохо понимаете откуда берутся данные, то стоит прочитать данный перевод.
Если же вы захотите знать больше, то в конце перевода я даю тройку книг с которых следует двигаться дальше.

Перейти к чтению
Всего голосов 40: ↑37 и ↓3+34
Комментарии44

Подробное введение в rvalue-ссылки для тех, кому не хватило краткого

Время на прочтение17 мин
Количество просмотров75K

Вместо КДПВ — короткая драма для привлечения внимания, основанная на реальных событиях. Ее можно смело пропустить и перейти к статье, которая поможет вам разобраться в rvalue-ссылках, конструкторах перемещения, универсальных ссылках, идеальной передаче (perfect forwarding) и т. д.


Драма в трех действиях


Действие первое


Компилятор. Локальный объект x типа T, проживающий на стеке, вы приговариваетесь к изъятию у вас всего имущества в связи с тем, что не будете пользоваться им до конца своей жизни.


Объект x. Что? Я не какой-то там временный объект, у меня постоянная регистрация, вы не имеете права!


Компилятор. Никто вас не выселяет. Но согласно одиннадцатой редакции стандартного кодекса, все ваши вещи будут переданы другому объекту, которому они нужны больше.


Объект x. И как вы это сделаете? Все мои данные надежно инкапсулированы, я не позволю никому бесцеремонно обращаться с ними. Если уж они так вам нужны, то пусть приходит конструктор копирования со своей флешкой, я ему скопирую.

Читать дальше →
Всего голосов 35: ↑33 и ↓2+31
Комментарии19

Radarr, Jackett и бот в телеге. Качаем торренты по-новому

Время на прочтение5 мин
Количество просмотров82K
image

В итоге, конечно, стриминг таки добьёт торренты. И если в 720/1080p мире это, по сути, уже свершилось, то Blue-ray/4k/8k контент пока ещё держится за счёт торрентов (у нас и в Европе) и юзнетов (штаты).

Сегодня стриминг выигрывает, в основном, за счёт удобства. Открыл апп, зашёл в раздел «новинки» и выбирай на любой вкус. Я прокачал свой процесс с торрентами, и теперь он смотрится, как минимум, не хуже.
Читать дальше →
Всего голосов 32: ↑32 и ↓0+32
Комментарии52

Автоматизируем домашний медиацентр на Synolgy NAS

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров35K

Приветствую читатели хабра, в этой статье я бы хотел поделиться своим опытом организации домашнего медиацентра с торрент качалкой на Synology NAS: sonarr + radarr + jackett + qBittorrent.

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Комментарии48

Всё как у больших. Автозагрузка приложений в оконных менеджерах linux

Время на прочтение9 мин
Количество просмотров19K
Вывод systemd-analyze dot --user ‘i3.service’ | dot -Tpng | imv -


Вывод systemd-analyze dot --user ‘i3.service’ | dot -Tpng | imv -

Как-то раз, листая сообщения в профильном systemd чате, в телеграм, я наткнулся на следующий кусок man systemd.special


xdg-desktop-autostart.target
   The XDG specification defines a way to autostart applications using XDG desktop files.
systemd ships systemd-xdg-autostart-generator(8) for the XDG desktop files in autostart
directories. Desktop Environments can opt-in to use this service by adding a Wants=dependency
on xdg-desktop-autostart.target.

О как интересно, подумалось мне. Можно реализовать функционал полноценныхDesktop Environments, по автоматическому запуску приложений, при старте. А у меня как раз i3wm, который таковым не является и которому такой функционал не помешал бы. Надо это дело исследовать. Тогда я ещё не знал во что ввязался. Как оказалось, не всё так просто.


Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии15

Управление Synology Surveillance Station с помощью Telegram, Python и Docker

Время на прочтение8 мин
Количество просмотров7.9K

Способ управление Synology Surveillance Station, находящегося внутри локальной сети без прямого доступа к Интернет, через Telegram-бота.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии6

Сетевые хранилища NAS: зачем нужны и как выбрать подходящее?

Время на прочтение15 мин
Количество просмотров171K

В нынешние времена практически любой смартфон может снимать фотографии в высоком разрешении и записывать видео 4K, поэтому пространство на персональном компьютере, ноутбуке или мобильных гаджетах заканчивается еще быстрее, чем раньше. Конечно, можно купить внешний жесткий диск для хранения и резервирования данных с ПК или телефона. Но в таком случае накопитель должен быть всегда под рукой. Как быть, если в командировке требуются рабочие файлы, а на ноутбуке их нет? Или хочется показать новым друзьям в отпуске фотографии из прошлой поездки? Можно закачать нужную папку в облако, но и там объемы ограничены. Да и нет гарантии полной защиты данных. Есть ли варианты хранения данных проще, современнее и удобнее?

Здесь на помощь приходят сетевые хранилища или NAS (Network Attached Storage). Еще лет десять назад их можно было встретить только в корпоративной среде, но сегодня они покоряют домашние сети. И это совсем не случайно: кроме базовой задачи хранения и доступа к данным современные NAS умеют намного больше. Они помогут настроить резервирование ценной информации с компьютеров, ноутбуков и гаджетов. Позволят удобно организовать музыку, фотографии и видео в мультимедийной библиотеке, чтобы каждое устройство получало контент в оптимальном формате. Обеспечат частным и защищенным облаком, чтобы рабочие файлы были всегда под рукой из любого места и с любого устройства. Помогут развернуть домашнюю систему видеонаблюдения без лишних затрат. И мы лишь начали перечислять возможности NAS.

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

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

Читать далее
Всего голосов 5: ↑2 и ↓3+1
Комментарии61

Собственные впечатления и обзор NAS Synology DS214

Время на прочтение11 мин
Количество просмотров160K
Здравствуйте, уважаемые хабражители. Сегодня я хотел бы поделиться с вами своими впечатлениями от использования NAS Synology DS214.


Читать дальше →
Всего голосов 49: ↑44 и ↓5+39
Комментарии120

Обзор домашнего NAS Synology DS220+

Время на прочтение9 мин
Количество просмотров52K

Обзор использования Synology DS220+ в качестве системы резервного копирования для дома, домашнего медиасервера и как элемент умного дома. В статье описанны особенности DS220+ и опыт его использования на протяжении 4 месяцев. Для сравнения кратко представлены альтернативные варианты способные заменить подобное устройство.Описание функционала и сценариев использования в статье довольно подробно и, как я надеюсь, поможет выбрать подходящий вариант резервного копирования.

Читать далее
Всего голосов 15: ↑12 и ↓3+12
Комментарии115

Шаблон backend сервера на Golang — часть 2 (REST API)

Время на прочтение32 мин
Количество просмотров31K

UPD. Ссылка на новый репозиторий проекта с поддержкой развертывания в Kubernetes


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


Первая часть шаблона посвящена HTTP серверу:


  • настройка HTTP сервера через командную строку и конфигурационный файл
  • настройка параметров TLS HTTP сервера
  • настройка роутера и регистрация HTTP и prof-обработчиков
  • настройка логирования HTTP трафика, логирования ошибок в HTTP
  • HTTP Basic и MS AD аутентификация, JSON Web Token
  • запуск сервера с ожиданием возврата в канал ошибок
  • использование контекста для корректной остановки сервера и связанных сервисов
  • настройка кастомной обработки ошибок и кастомного логирования
  • сборка кода с внедрением версии, даты сборки и commit

Вторая часть шаблона посвящена прототипированию REST API.
Ссылка на репозиторий проекта осталась прежней.


Третья часть посвящена развертыванию шаблона в Docker, Docker Compose, Kubernetes (kustomize).


Пятая часть посвящена оптимизации Worker pool и особенностям его работы в составе микросервиса, развернутого в Kubernetes.


Архитектура шаблона REST API


В ходе тестирования шаблона на стенде были получены следующие результаты.

Читать дальше →
Всего голосов 8: ↑7 и ↓1+8
Комментарии2

Языковая механика escape analysis

Время на прочтение9 мин
Количество просмотров20K

Прелюдия


Это вторая из четырех статей в серии, которая даст представление о механике и дизайне указателей, стеков, куч, escape analysis и семантики значения/указателя в Go. Этот пост посвящен кучам и escape analysis.

Оглавление цикла статей:

  1. Language Mechanics On Stacks And Pointers (перевод)
  2. Language Mechanics On Escape Analysis
  3. Language Mechanics On Memory Profiling (перевод)
  4. Design Philosophy On Data And Semantics

Вступление


В первом посте из этой серии я рассказал основы механики указателя на примере, в котором значение распределяется по стеку между горутинами. Я не показывал вам, что происходит, когда вы разделяете значение в стеке. Чтобы понять это, вам нужно узнать о другой области памяти, где могут находиться значения: о «куче». С этим знанием вы можете начать изучать «escape analysis».
Читать дальше →
Всего голосов 4: ↑3 и ↓1+5
Комментарии1

Генерация кода в Go

Время на прочтение6 мин
Количество просмотров44K
Перевод статьи Роба Пайка из официального блога Go о автоматической кодогенерации с помощью go generate. Статья немного устарела (была написана перед выходом Go 1.4, в котором и появился go generate), но хорошо объясняет суть работы go generate.
Читать дальше →
Всего голосов 34: ↑26 и ↓8+18
Комментарии26

Танцы с мьютексами в Go

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

Уровень чтения: средний (intermediate) — эта статья подразумевает, что вы знакомы с основами Go и моделью concurrency, и, как минимум, знакомы с подходами к синхронизации данных методами блокировок и каналов.

Заметка читателю: На этот пост меня вдохновил хороший друг. Когда я помог ему разобраться с некоторыми гонками в его коде и постарался научить его искусству синхронизации данных так хорошо, насколько только был способен, я понял, что эти советы могут быть полезны и другим. Так что, будь это унаследованная кодовая база, в которой определенные решения по дизайну уже были приняты до вас, или вы просто хотите лучше понимать традиционные примитивы синхронизации в Go — эта статья может быть для вас.
Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии22

Как устроены каналы в Go

Время на прочтение4 мин
Количество просмотров69K

Перевод познавательной статьи "Golang: channels implementation" о том, как устроены каналы в Go.


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


Устройство канала


Давайте начнём с разбора структуры канала:


Читать дальше →
Всего голосов 38: ↑34 и ↓4+30
Комментарии11

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность