При запуске кода на игровой площадке Go разработчики могут столкнуться с несоответствиями по сравнению с запуском того же кода на своих локальных машинах. В этой статье рассматриваются различия в поведении, особенно при работе с горутинами и механизмами синхронизации.
Рассмотрим следующий код Go:
package main
import (
"fmt"
)
func other(done chan bool) {
done На игровой площадке Go этот код выдает ошибку: «Процесс занял слишком много времени». Это говорит о том, что горутина, созданная внутри другой функции, выполняется бесконечно.
Однако запуск того же кода на локальном компьютере с несколькими ядрами ЦП (GOMAXPROCS > 1) дает следующий результат:
Hello, playground
Finished.
Это означает, что горутина, созданная внутри других, завершается после завершения основной горутины.
Объяснение поведенческого разрыва
Разное поведение между игровой площадкой Go и локальной машиной можно объяснить количеством доступных процессоров. На игровой площадке Go значение GOMAXPROCS по умолчанию равно 1, что означает, что одновременно может выполняться только одна горутина. Таким образом, в приведенном выше примере бесконечная горутина, созданная внутри других, не позволяет основной горутине продолжать работу.
Напротив, при локальном запуске с несколькими ядрами ЦП GOMAXPROCS по умолчанию использует количество доступных ядер, позволяя нескольким горутинам работать запускать одновременно. Таким образом, бесконечная горутина, созданная внутри других, не блокирует выход основной горутины.
Вывод
Поведение горутин в Go зависит от количества доступных процессоров (GOMAXPROCS). В то время как игровая площадка Go использует значение по умолчанию, равное 1, что может привести к восприятию горутин, работающих бесконечно, запуск того же кода на локальной машине с несколькими ядрами обеспечивает другое поведение, при котором горутины могут завершиться после завершения основной горутины. Такое понимание помогает разработчикам избежать недоразумений и гарантирует, что их код будет вести себя должным образом в различных средах.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3