LINUX.ORG.RU

Вроде легковесные процессы есть в gambit scheme (по производительности сопоставимы с erlang, есть ерлангоподобная библиотека termit). В cmucl вроде тоже были легковесные нити.

slav ★★
()

В Gambit Scheme легковесные процессы не могут использовать несколько ядер. Вообще http://en.wikipedia.org/wiki/Green_threads. Только Erlang лучшее что есть на сегодня в этой области.

capricorn20
()
Ответ на: C от linuxfan

>Сабж. Я не шучу и не троллю.

Попробуй поработать с «под 100к процессов» через Posix Threads.

capricorn20
()
Ответ на: комментарий от vada

для erlang даже 1m процессов это не жопа.

просто есть очень интересный мне (и не только мне) проект, и хочется задействовать максимум ядер, сколько бы их не было не компе/кластере. и есть понимание как разделять задачи на (почти)независимые процессы.

vahvarh ★★★
() автор топика
Ответ на: комментарий от mv

> Это, скорее, контексты, чем процессы в понимании ОС.

Что-то типа того, но не стоит забывать что виртуальная машина эрланг зажрёт-таки все процессоры, то есть отспавнится в количестве тредов большем или равном количеству процессоров.

vahvarh ★★★
() автор топика
Ответ на: комментарий от vahvarh

Что-то типа того, но не стоит забывать что виртуальная машина эрланг зажрёт-таки все процессоры, то есть отспавнится в количестве тредов большем или равном количеству процессоров.

Полностью асинхронную архитектуру при проектировании из виду тоже упускать не стоит :)

mv ★★★★★
()
Ответ на: комментарий от mv

то есть «полностью асинхронную»?

эрланг и есть полностью асинхронная. там есть понятие процессов и обмена данными между процессами с помощью механизма сообщений. другими способами процессы обмениваться данными не могут.

vahvarh ★★★
() автор топика

Мимо проходил

> другие языки позволяющие наплодить под 100к процессов

В Google Go подобное обещали. Насколько это правда - не знаю.

iley
()
Ответ на: комментарий от vahvarh

то есть «полностью асинхронную»?

Программа, написанная без блокировок, с использованием того или иного вида мультиплексера.

эрланг и есть полностью асинхронная.

Я не особо в курсе, как кишки эрланга устроены, но существует 2 варианта, как оно может быть устроено в юзерспейсе и только средствами юзейрспейса:

1. Виртуальная машина, и шедуллер, висящий на таймере. Шедуллер может безопасно изменить текущий контекст, т.к. вся работа эмулируется в виртуальной машине.

2. Настоящая машина, зелёные потоки работают без блокирующихся операций. Вернее, они есть, но специальным образом обрабатываются шедуллером. Шедуллер может безопасно изменить контекст только при вызове блокирующейся операции. Так, например, работает CMUCL.

Оба варианта, закрывая глаза на детали, для программиста выглядят, как синхронные. Т.е. именно предоставляют множество контекстов, выполняющихся параллельно. Даже если контексты в реальности выполняются далеко не параллельно, это неважно для такой модели.

Асинхронная архитектура, например, на плюсах хорошо делается при помощи boost::asio. Там программа крутится на реакторе (селект, типа), совершая короткие действия по тому или иному событию. Программист сам должен следить за отсутствием блокировок.

там есть понятие процессов и обмена данными между процессами с помощью механизма сообщений.

Message passing к асинхронности никакого отношения не имеет. В Эрланге это разумная изоляция контекстов, позволяющая, в том числе, совершенно прозрачно утащить контекст на другую ноду.

Вообще, если идеология и производительность Эрланга на твой проект ложится хорошо, то юзай без сомнений :)

mv ★★★★★
()
Ответ на: комментарий от mv

в эрланге нет блокировок и как я понял виртуальная машина erlang использует green threads для параллелизма. и соответственно, как ты уже сказал, каждая машина это node. ноды могут быть на разных компьютерах или на одном. и разницы для программы на эрланге нет никакой.

ну и соответственно раз уж у erlang единственный способ обмена данными - сообщения, то это и получается event-driven способ, который, как я понял и есть асинхронное программирование.

vahvarh ★★★
() автор топика
Ответ на: комментарий от vahvarh

С++ + OpenMP или IntelTBB не катит? Там ты создашь дофига Task-ов, а реальных нитей будет столько, сколько есть ядер на машине.

YesSSS ★★★
()

Ну, Хаскель вполне позволяет, только что проверил.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.