В своем выступлении - https://blog.golang.org/concurrency-is-not-parallelism, Роб Пайк говорит, что ходячие процедуры похожи на потоки, но намного дешевле. Может кто-нибудь объяснить, почему?Почему goroutines намного дешевле, чем потоки на других языках?
5
A
ответ
4
См. "How goroutines work".
Они дешевле в: потребление
- памяти:
Поток начинается с большой памятью, в отличие от нескольких килобайт. - установку и демонтаж расходы
(Вот почему вы должны поддерживать пул потока) - Издержки переключения
Потоки запланированных превентивно, и при переключении потока, планировщик необходим для сохранения/восстановления всех регистров.
В отличие от Go, где среда выполнения управляет goroutines от создания до планирования до срыва. И количество регистров для сохранения ниже.
Плюс, как уже упоминалось в «Go’s march to low-latency GC», GC легче осуществить, когда среда выполнения отвечает за управление goroutines:
С момента введения его параллельного GC в Go 1.5, среда отслеживает, выполнил ли горутин с момента последнего сканирования стека. Фаза завершения метки проверила бы каждый горутин, чтобы увидеть, был ли он недавно запущен, и повторное сканирование нескольких из них.
В версии 1.7, среда выполнения содержит отдельный короткий список таких горутов. Это устраняет необходимость просмотра всего списка goroutines при приостановке кода пользователя и значительно уменьшает количество обращений к памяти, которые могут инициировать код миграции памяти NUMA ядра.
Смежные вопросы
- 1. MFMailComposeViewController на других языках?
- 2. Почему умножается дешевле деления?
- 3. Mysql запросы на других языках
- 4. Аналоги Goroutine на других языках
- 5. PEAR альтернативы на других языках
- 6. Excel Макросы на других языках
- 7. Распознавание речи на других языках
- 8. Cloudfront трафик дешевле, чем S3?
- 9. Почему do_GET намного быстрее, чем do_POST
- 10. Как Golang реализует потоки ОС для goroutines?
- 11. Bash поиск функций на других языках
- 12. Почему ChromeDriver работает намного лучше, чем PhantomJSDriver
- 13. Почему Solr намного быстрее, чем Postgres?
- 14. Почему PreparedStatement намного быстрее, чем заявление?
- 15. Почему FLV загружается намного быстрее, чем MP4?
- 16. Почему cffi намного быстрее, чем numpy?
- 17. Почему WebView намного быстрее, чем TextView
- 18. Почему компиляция TypeScript на Mac намного быстрее, чем на ПК?
- 19. C эквиваленты указателей на других языках
- 20. Почему numpy.all намного медленнее, чем стандарт python?
- 21. Почему C# компилируется намного быстрее, чем C++?
- 22. Почему EnumerateFiles намного быстрее, чем вычисление размеров.
- 23. Почему node.js намного медленнее, чем Google Chrome?
- 24. Почему подзарядка намного быстрее, чем цифра?
- 25. Почему Ruby намного медленнее, чем Java?
- 26. C#: Почему словарь намного быстрее, чем список?
- 27. Почему nio.files.copy намного медленнее, чем nio.fileChannel copy?
- 28. Почему заголовочные файлы не улавливаются на других языках программирования?
- 29. Почему пакетный режим намного быстрее, чем parfor?
- 30. Почему «hg push» намного больше, чем .hg?