Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: concurrency, parallelism, goroutines, channel

Объясните разницу между конкурентностью и параллельностью в Go

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

Короткий ответ

Конкурентность в Go — это способность программы обрабатывать несколько задач одновременно, в то время как параллельность — это способность выполняться несколько задач одновременно на нескольких процессорах. В Go для этого используются горутины и каналы.

Длинный ответ

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

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

В Go реализована конкурентность через механизм горутин — легковесных потоков, которые могут выполнять разные задачи параллельно, но они все работают в рамках одного процесса. Горутины управляются планировщиком Go и могут быть запущены с помощью ключевого слова go.

Каналы в Go используются для общения между горутинами, обеспечивая синхронизацию и передачу данных.

Пример:

package main
import "fmt"

func task(id int, ch chan string) {
    	ch <- fmt.Sprintf("Task %d finished", id)
}

func main() {
    	ch := make(chan string)
    	for i := 0; i < 5; i++ {
        	go task(i, ch) // Запуск горутины
    	}

    	for i := 0; i < 5; i++ {
        	fmt.Println(<-ch) // Получение результата
    	}
}

Здесь мы создаем 5 горутин, которые выполняют задачу и отправляют результаты через канал.

В каких случаях использовать:

  • Когда нужно обрабатывать несколько задач одновременно в пределах одного приложения (конкурентность).

  • Когда важно использовать ресурсы нескольких процессоров для выполнения задач в реальном времени (параллельность).

  • Для синхронизации работы разных горутин с помощью каналов.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Golang

    Golang

Ключевые слова

#concurrency

#parallelism

#goroutines

#channel

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.