GO_INTERVIEW_LIB Telegram 460
💬 Как горутина, выполняющая блокирующий системный вызов, перемещается в глобальную очередь готовых к выполнению горутин в рантайме Go. Какие этапы проходят при этом?

Когда горутина выполняет блокирующий системный вызов, она блокируется и рантайм Go временно паркует её, освобождая поток (M) для выполнения других горутин.

После завершения блокирующей операции горутина разблокируется и перемещается в глобальную очередь готовых к выполнению горутин. Планировщик Go затем выбирает горутину из глобальной очереди и назначает её на доступный поток (M) с логическим процессором (P) для продолжения выполнения.

📌 Пример:

package main

import (
"fmt"
"net/http"
"time"
)

func main() {
go fetch("http://example.com")
fmt.Println("Fetching started")
time.Sleep(5 * time.Second)
}

func fetch(url string) {
resp, err := http.Get(url)
if err != nil {
fmt.Println("Error fetching URL:", err)
return
}
defer resp.Body.Close()
fmt.Println("Fetched", url, "with status:", resp.Status)
}


Он демонстрирует, как горутина fetch блокируется на HTTP-запросе, освобождает поток, и после завершения системного вызова возвращается в глобальную очередь для продолжения выполнения.
👍8👾32



tgoop.com/go_interview_lib/460
Create:
Last Update:

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

Когда горутина выполняет блокирующий системный вызов, она блокируется и рантайм Go временно паркует её, освобождая поток (M) для выполнения других горутин.

После завершения блокирующей операции горутина разблокируется и перемещается в глобальную очередь готовых к выполнению горутин. Планировщик Go затем выбирает горутину из глобальной очереди и назначает её на доступный поток (M) с логическим процессором (P) для продолжения выполнения.

📌 Пример:

package main

import (
"fmt"
"net/http"
"time"
)

func main() {
go fetch("http://example.com")
fmt.Println("Fetching started")
time.Sleep(5 * time.Second)
}

func fetch(url string) {
resp, err := http.Get(url)
if err != nil {
fmt.Println("Error fetching URL:", err)
return
}
defer resp.Body.Close()
fmt.Println("Fetched", url, "with status:", resp.Status)
}


Он демонстрирует, как горутина fetch блокируется на HTTP-запросе, освобождает поток, и после завершения системного вызова возвращается в глобальную очередь для продолжения выполнения.

BY Библиотека Go для собеса | вопросы с собеседований


Share with your friend now:
tgoop.com/go_interview_lib/460

View MORE
Open in Telegram


Telegram News

Date: |

2How to set up a Telegram channel? (A step-by-step tutorial) Don’t publish new content at nighttime. Since not all users disable notifications for the night, you risk inadvertently disturbing them. To delete a channel with over 1,000 subscribers, you need to contact user support With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc.
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American