Я хотел бы начать новый проект сетевого сервера на языке, который поддерживает параллелизм через волокна, также известные как сопрограммы или потоки пользовательского режима. Определить, какие именно варианты у меня есть, было чрезвычайно сложно, поскольку термин «сопрограмма», кажется, используется довольно свободно для обозначения множества вещей, а «волокно» используется почти исключительно в отношении Win32 API.
Для целей этого вопроса сопрограммы / волокна:
- методы поддержки, которые приостанавливают выполнение, передавая результат вызывающей функции из вложенной функции (т. е. произвольно глубоко в стеке вызовов, откуда была вызвана сопрограмма / волокно)
- поддержка передачи управления другой произвольной сопрограмме в ее текущей точке выполнения (т.е. уступить сопрограмме, которая не вызвала вашу сопрограмму)
Какие у меня варианты языка? Я знаю, что у Ruby 1.9 и Perl (Coro) есть поддержка, что еще? Достаточно всего, что имеет зрелый gc и вызов динамических методов.