2017-01-28 1 views

ответ

4

См. "How goroutines work".
Они дешевле в: потребление

  • памяти:
    Поток начинается с большой памятью, в отличие от нескольких килобайт.
  • установку и демонтаж расходы
    (Вот почему вы должны поддерживать пул потока)
  • Издержки переключения
    Потоки запланированных превентивно, и при переключении потока, планировщик необходим для сохранения/восстановления всех регистров.
    В отличие от Go, где среда выполнения управляет goroutines от создания до планирования до срыва. И количество регистров для сохранения ниже.

Плюс, как уже упоминалось в «Go’s march to low-latency GC», GC легче осуществить, когда среда выполнения отвечает за управление goroutines:

С момента введения его параллельного GC в Go 1.5, среда отслеживает, выполнил ли горутин с момента последнего сканирования стека. Фаза завершения метки проверила бы каждый горутин, чтобы увидеть, был ли он недавно запущен, и повторное сканирование нескольких из них.

В версии 1.7, среда выполнения содержит отдельный короткий список таких горутов. Это устраняет необходимость просмотра всего списка goroutines при приостановке кода пользователя и значительно уменьшает количество обращений к памяти, которые могут инициировать код миграции памяти NUMA ядра.

Смежные вопросы