Языки сценариев та поддержка волокна/сопрограммы?

Я хотел бы запустить новый проект сетевого сервера на языке, который поддерживает параллелизм через волокна иначе сопрограммы иначе потоки непривилегированного режима. Определение, что точно является моими опциями, было чрезвычайно трудным, поскольку термин "сопрограмма", кажется, используется вполне свободно для значения множества вещей, и "волокно" используется почти исключительно в отношении API Win32.

В целях этого вопроса, сопрограмм/волокон:

  • методы поддержки, что выполнение паузы путем уступки результата вызову функционирует из вложенной функции (т.е. произвольно глубоко в стеке вызовов от того, где сопрограмма/волокно была вызвана),
  • передача поддержки управляет к другой произвольной сопрограмме в ее текущей точке выполнения (т.е. урожай к сопрограмме, которая не назвала Вашу сопрограмму),

Каковы мои опции языка? Я знаю Ruby 1.9 и Perl (Коро), у обоих есть поддержка, что еще? Что-либо с опытным gc и динамическим вызовом метода достаточно.

8
задан Logan Bowers 24 December 2009 в 02:55
поделиться

4 ответа

Stackless Python - еще один вариант, отвечающий вашим требованиям. Если Python, Ruby и Perl не подходят для ваших целей (несмотря на то, что все они удовлетворяют вашим заявленным требованиям), вероятно, у вас есть другие нестандартные требования или предпочтения - хотите их прописать?-)

.
1
ответ дан 5 December 2019 в 12:09
поделиться

Луа поддерживает корутины, см. http://lua-users.org/wiki/CoroutinesTutorial, попробуй!

.
4
ответ дан 5 December 2019 в 12:09
поделиться

Схема имеет вызов с прерыванием тока , который является строительным блоком, на котором могут быть построены все виды регулирования расхода. Она определённо может поддерживать два вида использования, о которых Вы упомянули.

Существует множество надежных, широко доступных реализаций схемы, таких как PLT Scheme и Chicken Scheme.

.
1
ответ дан 5 December 2019 в 12:09
поделиться
Расширение

greenlet удовлетворяет вашим требованиям на Python (обычный, не Stackless).

Greenlet API немного низкоуровневый, поэтому я рекомендую использовать gevent, который дает вам API, подходящий для приложения. (Отказ от ответственности: я написал gevent)

.
6
ответ дан 5 December 2019 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: