Добро пожаловать в этот пост с несколько унизительным названием.
Но в этом посте я хочу объяснить вам, что представляют собой эти две характеристики программирования, очень простым способом, на этот раз используя мой любимый язык программирования GOLANG.
Представим себе кухню:
Приготовить блюдо: это задание.
Повар: Он переработчик.
Совпадение:
На кухне несколько поваров: каждый готовит свое блюдо.
In Go: Каждый повар будет горутиной. Хотя на кухне (процессоре) есть только одна духовка, повара могут работать над блюдами одновременно, тратя время на другие задачи, ожидая, пока духовка освободится.
Параллелизм:
Различные духовки: У каждого повара своя духовка.
In Go: Если у нас есть несколько физических процессоров, каждая горутина может работать на другом процессоре, одновременно готовя несколько блюд в реальной жизни.
В чем разница?
Параллелизм: задачи выполняются взаимосвязанно, создавая иллюзию параллелизма даже на одном процессоре.
Параллелизм: задачи выполняются одновременно на нескольких процессорах, что значительно ускоряет процесс.
Как их использовать в Go?
Горутины: Они подобны легким нитям. Чтобы создать горутину, мы просто используем ключевое слово go перед функцией:
Давайте посмотрим пример того, как мы можем использовать горутины в golang:
go func() { // Código que se ejecutará en una goroutine }()
Каналы: это каналы, через которые горутины могут взаимодействовать и синхронизироваться.
Представьте, что это трубки, по которым ингредиенты передаются между поварами
ch := make(chan int) go func() { chПрактический пример:
package main import ( "fmt" "time" ) func worker(id int, c chan int) { for n := range c { fmt.Printf("Worker %d received %d\n", id, n) time.Sleep(time.Second) } } func main() { c := make(chan int) for i := 1; iВывод этого кода будет
Worker 1 received 1 Worker 2 received 2 Worker 3 received 3 Worker 4 received 4 Worker 5 received 5 Worker 1 received 6 Worker 2 received 7 Worker 3 received 8 Worker 4 received 9 Worker 5 received 10хотя иногда это может выглядеть так
Worker 5 received 1 Worker 1 received 3 Worker 2 received 2 Worker 4 received 5 Worker 3 received 4 Worker 3 received 6 Worker 5 received 10 Worker 2 received 8 Worker 4 received 7 Worker 1 received 9или вот так
Worker 5 received 1 Worker 1 received 2 Worker 2 received 3 Worker 3 received 4 Worker 4 received 5 Worker 1 received 6 Worker 2 received 7 Worker 3 received 8 Worker 5 received 9 Worker 4 received 10Почему вывод меняется каждый раз, когда я запускаю программу?
Основная причина, по которой выходные данные программы изменяются при каждом выполнении, связана с недетерминированной природой параллелизма.
Вот что происходит:
Создать канал: make(chan int) создает канал целых чисел. Этот канал будет использоваться для связи между горутинами.
Запуск горутины: Цикл для i := 1; я Рабочая функция получает идентификатор и канал.
Отправить значения в канал: Цикл для n := 1; п 1 до 10 в канал.
Закрыть канал: вызов close(c) закрывает канал, указывая, что больше значения отправляться не будут.
Получить значения из канала: Каждая горутина получает значения из канала с помощью цикла c for n := range. Когда значение получено, оно выводится на консоль.
Дождитесь завершения горутин: вызов time.Sleep(time.Second) гарантирует, что основная горутина ожидает завершения других горутин перед выходом.
До настоящего времени:
Создаем 5 горутин (куков), которые получают номера через канал.
Отправляем цифры в канал для обработки поварами.
Повара работают одновременно, обрабатывая цифры по мере их поступления.Зачем использовать параллелизм и параллелизм в Go?
Более высокая производительность: особенно в задачах, связанных с вводом-выводом (например, чтение файлов или выполнение HTTP-запросов).
Повышенная скорость реагирования: приложение может продолжать отвечать на другие запросы, пока задача заблокирована.
Более масштабируемые архитектуры: вы можете распределять работу между несколькими ядрами или компьютерами.Помнить!
Параллелизм и параллелизм — мощные инструменты, но они также могут усложнить понимание и отладку кода. Важно использовать их осторожно и понимать их последствия.
Хотите углубиться в конкретную тему?
Мы можем изучить такие понятия, как:
Синхронизация: мьютексы, рабочие группы и т. д.
Шаблоны параллелизма: производитель-потребитель, конвейер и т. д.
Параллельное тестирование: как эффективно тестировать параллельный код.Привет,
Лукатонни РаудалесX/Твиттер
Гитхаб
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3