Языки сценариев, которые поддерживают волокна / сопрограммы? - PullRequest
8 голосов
/ 24 декабря 2009

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

Для целей этого вопроса сопрограммы / волокна:

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

Какие у меня языковые параметры? Я знаю, что у Ruby 1.9 и Perl (Coro) есть поддержка, что еще? Достаточно всего, что имеет зрелый вызов gc и динамический вызов метода.

Ответы [ 5 ]

6 голосов
/ 02 января 2010

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

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

4 голосов
/ 24 декабря 2009

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

2 голосов
/ 03 сентября 2010

Tcl 8,6 , в настоящее время в бета-версии, будет поддерживать сопрограммы. Для получения дополнительной информации см. страницу сопрограммы Tcl Wiki

1 голос
/ 24 декабря 2009

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

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

1 голос
/ 24 декабря 2009

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

...