Найти в Дзене
#24 Планировщик горутин
Чтобы понять, как работает планировщик горутин, рассмотрим наглядный пример. Есть ресторан, в котором работают повара и у них множество заказов, которые необходимо приготовить. Повара в данном случае - это логические процессоры, а заказы это горутины, которые нужно обработать. Каждый повар работает только над одним заказом за раз. Аналогично этому логический процессор выполняет одну горутину. Если заказ требует длительного ожидания (например, нужно сварить 40 хинкалей), повар может начать работать над другим заказом...
328 читали · 1 год назад
#23 TCP vs UDP. Реализация на Go
Назовите разницу между протоколами TCP и UDP Этот вопрос часто встречается на собеседованиях в секции про сети или Computer Science. Важно понимать, в каких ситуациях предпочтительнее использовать TCP (Transmission Control Protocol), а в каких — UDP (User Datagram Protocol). Выбор протокола должен основываться на требованиях к приложению, особенно в контексте скорости, надежности и последовательности передачи данных. Транспортный уровень модели OSI TCP и UDP расположены на транспортном уровне (4-м уровне) модели OSI...
525 читали · 1 год назад
#22 Когда использовать sync.Map в Go
map в Go не потокобезопасны и требуют защиты через мьютексы при конкурентном доступе. В отличие от них, sync.Map обеспечивает безопасность при конкурентном доступе без необходимости явно использовать мьютексы. Основные методы sync.Map Delete(key any): удаляет элемент по ключу; Load(key any) (value any, ok bool): извлекает значение по ключу; LoadAndDelete(key any) (value any, loaded bool): извлекает и одновременно удаляет элемент; LoadOrStore(key, value any) (actual any, loaded bool): извлекает значение...
948 читали · 1 год назад
#21 Отличие горутин от потоков
Горутина — блок кода, который работает асинхронно. Объявляется через оператор go перед функцией. Главной горутиной является вызов функции main. Если завершается выполнение этой функции, то завершается и выполнение всей программы. Размер Системный поток имеет блок памяти фиксированного размера (стек), который зависит от операционной системы. Например, для Windows размер стека обычно 1 МБ. В Linux размер стека для потоков, как правило, составляет от 2 до 10 МБ, в зависимости от дистрибутива и настроек ядра...
1229 читали · 1 год назад
#20 Как слить n каналов в один в Go
Одна из самых популярных задач на каналы. Условие Даны n каналов типа int. Нужно написать функцию, которая сольет (смержит) все данные из этих каналов в один и вернет его. Решение Напишем сигнатуру функции merge, которая принимает любое количество каналов типа int на вход и возвращает результирующий канал того же типа. resultChannel сделаем с буфером 1, не обязательно, но так мы уменьшим количество переключений между горутинами. Чтобы не забыть, сразу закроем результирующий канал в отдельной горутине...
861 читали · 1 год назад
Если нравится — подпишитесь
Так вы не пропустите новые публикации этого канала