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