@Toster100

В каких языках существуют аналоги goroutines в плане производительности и простоты?

Есть язык Go и в нем есть замечательные Goroutines. Я, например, написал простенькую программу, которая выполняет тысячи одновременных обращений к удаленным узлам, при этом похожая по функционалу программа на Java или другом языке, использующем нативные потоки ОС, жрала бы во много раз больше системных ресурсов (а программа на Go не грузит проц более, чем на 30% и то это на старом компе с запущенным браузером, эклипсом и прочей фигней и не особенно оптимизированная).

Язык Go, безусловно, предоставляет удобную и, похоже, уникальную, модель многопоточности (горутины+каналы), но, на мой взгляд, это все хорошее, что можно о нем сказать. Сам язык убогий, о чем написано довольно много статей.

Вопрос в том, есть ли реальные альтернативы горутинам в других языках в плане производительности и накладных расходов?
  • Вопрос задан
  • 1106 просмотров
Решения вопроса 1
Olej
@Olej
инженер, программист, преподаватель
при этом похожая по функционалу программа на Java или другом языке, использующем нативные потоки ОС, жрала бы во много раз больше системных ресурсов

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

P.S. Кстати, модель Go-рутин использует нативные потоки, и программа Go, даже вовсе не использующая параллелизм, тоже активно использует нативные потоки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
mututunus
@mututunus
Backend developer (Python, Golang)
Erlang.
Ответ написан
Комментировать
@beduin01
На dlang.org посмотрите и в частности vibed.org Синтаксис куда приятнее чем у Go.
Ответ написан
@lega
Используйте Го там где нужны горутины, а для других задач тот язык который вам удобней.
Ответ написан
Комментировать
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Легкие потоки на уровне библиотек есть практически во всех современных языках. Для упомянутой вами JavaVirtualMachine это Akka-Skala. В Go потоки и каналы введены в синтаксис языка, что дает конструкцию 'select case', которую чрезвычайно трудно реализовать в библиотеках. Идеология Хоара Communicating_Secuential_Processeses полностью на уровне синтаксиса реализована в Erlang с тем отличием от Go, что потоки именованы и к ним можно обращаться лично(в Go именованы только каналы). Вы вполне можете написать свой диспетчер на libthreads и системных вызовах epoll, kqueue. Также конкретную задачу тысячи обращений к удаленным узлам можно реализовать простым циклом, что в сущности и происходит под капотом, и такое частное решение конкретной задачи всегда будет эффективней.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект