GOLANG_INTERVIEW Telegram 948
Объясните, что такое goroutine и как Go управляет конкурентностью. В чем разница между использованием goroutine и thread в традиционных языках программирования? Приведите пример, в котором несколько goroutine взаимодействуют через каналы

❗️ В Go goroutine — это легковесная потокоподобная сущность, используемая для выполнения задач параллельно или асинхронно. Goroutine легче и менее затратна по памяти по сравнению с традиционными потоками (threads), что позволяет создавать десятки тысяч goroutine в одном приложении.

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

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

▪️ Ниже приведен пример, в котором две goroutine взаимодействуют через канал:

package main

import (
"fmt"
"time"
)

// Функция для записи чисел в канал
func produceNumbers(channel chan int) {
for i := 1; i <= 5; i++ {
fmt.Printf("Produced: %d\n", i)
channel <- i // Отправка числа в канал
time.Sleep(500 * time.Millisecond)
}
close(channel) // Закрытие канала после завершения отправки
}

// Функция для чтения из канала
func consumeNumbers(channel chan int) {
for num := range channel { // Чтение значений из канала
fmt.Printf("Consumed: %d\n", num)
time.Sleep(700 * time.Millisecond)
}
}

func main() {
channel := make(chan int)

go produceNumbers(channel) // Запуск первой goroutine
go consumeNumbers(channel) // Запуск второй goroutine

time.Sleep(4 * time.Second) // Ожидание завершения всех goroutine
}


💡 Основные отличия goroutine от потоков:

🌟Меньшие накладные расходы: goroutine используют порядка 2KB памяти, тогда как системные потоки требуют несколько мегабайт.

🌟Управление планировщиком Go: go-планировщик управляет goroutine и их распределением между потоками, тогда как в традиционных языках управление потоками часто ложится на ОС.

🌟Высокая масштабируемость: благодаря легкости создания, goroutine позволяют эффективно использовать конкурентность даже в системах с большим числом ядер.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🎉2🥱2



tgoop.com/golang_interview/948
Create:
Last Update:

Объясните, что такое goroutine и как Go управляет конкурентностью. В чем разница между использованием goroutine и thread в традиционных языках программирования? Приведите пример, в котором несколько goroutine взаимодействуют через каналы

❗️ В Go goroutine — это легковесная потокоподобная сущность, используемая для выполнения задач параллельно или асинхронно. Goroutine легче и менее затратна по памяти по сравнению с традиционными потоками (threads), что позволяет создавать десятки тысяч goroutine в одном приложении.

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

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

▪️ Ниже приведен пример, в котором две goroutine взаимодействуют через канал:

package main

import (
"fmt"
"time"
)

// Функция для записи чисел в канал
func produceNumbers(channel chan int) {
for i := 1; i <= 5; i++ {
fmt.Printf("Produced: %d\n", i)
channel <- i // Отправка числа в канал
time.Sleep(500 * time.Millisecond)
}
close(channel) // Закрытие канала после завершения отправки
}

// Функция для чтения из канала
func consumeNumbers(channel chan int) {
for num := range channel { // Чтение значений из канала
fmt.Printf("Consumed: %d\n", num)
time.Sleep(700 * time.Millisecond)
}
}

func main() {
channel := make(chan int)

go produceNumbers(channel) // Запуск первой goroutine
go consumeNumbers(channel) // Запуск второй goroutine

time.Sleep(4 * time.Second) // Ожидание завершения всех goroutine
}


💡 Основные отличия goroutine от потоков:

🌟Меньшие накладные расходы: goroutine используют порядка 2KB памяти, тогда как системные потоки требуют несколько мегабайт.

🌟Управление планировщиком Go: go-планировщик управляет goroutine и их распределением между потоками, тогда как в традиционных языках управление потоками часто ложится на ОС.

🌟Высокая масштабируемость: благодаря легкости создания, goroutine позволяют эффективно использовать конкурентность даже в системах с большим числом ядер.

@golang_interview

BY Golang вопросы собеседований


Share with your friend now:
tgoop.com/golang_interview/948

View MORE
Open in Telegram


Telegram News

Date: |

With the sharp downturn in the crypto market, yelling has become a coping mechanism for many crypto traders. This screaming therapy became popular after the surge of Goblintown Ethereum NFTs at the end of May or early June. Here, holders made incoherent groaning sounds in late-night Twitter spaces. They also role-played as urine-loving Goblin creatures. Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram. To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. A Hong Kong protester with a petrol bomb. File photo: Dylan Hollingsworth/HKFP. Telegram Android app: Open the chats list, click the menu icon and select “New Channel.”
from us


Telegram Golang вопросы собеседований
FROM American