Почему Flex не поддерживает потоки? - PullRequest
2 голосов
/ 15 июня 2010

Почему Flex / ActionScript в настоящее время не поддерживает многопоточность?

Ответы [ 5 ]

5 голосов
/ 16 июня 2010

Flash и Flex основаны на ActionScript, который не поддерживает многопоточность. Официальное объяснение Adobe заключается в том, что потоки могут вызывать очень различное поведение на разных пользовательских машинах, а условия гонки в потоке могут привести к проблемам с производительностью на и без того высокопроизводительной платформе, такой как флэш-плеер.

Говорят о поддержке пулов рабочих групп, похожих на те, что есть в HTML5, в будущем выпуске Flash, но пока это не официально.

Информацию о том, как подделать потоки в ActionScript, можно найти в презентации Хуэн Ту Дао о зеленых нитях: http://www.slideshare.net/queencodemonkey/360flex-greenthreading-in-flex

Еще одна альтернатива - отправить численно интенсивные вычисления в Pixel Bender. Pixel Bender - это флеш-сервис, который работает на собственном потоке, обеспечивая лучшую производительность. Для получения дополнительной информации о реализации этого метода, проверьте: http://www.adobe.com/devnet/flex/articles/flashbuilder4_pixelbender.html

3 голосов
/ 15 июня 2010

Это один из тех вопросов, на которые нет ответа, не так ли?

Flash Player поддерживает многопоточность;однако эта функциональность не предоставляется разработчикам, создающим приложения.

Потоки могут быть сложными и могут легко использоваться неправильно, создавая проблемы с производительностью, возникающие из-за создания слишком большого количества потоков.Adobe традиционно приняла решение не давать разработчикам достаточно веревки, чтобы повесить себя с точки зрения открытых API.

[хотя многие разработчики находят способы повеситься без многопоточности]

1 голос
/ 15 июня 2010

Почему? Потому что параллелизм опасен. Нити - необходимое зло. И они часто злоупотребляют и злоупотребляют. Вместо того, чтобы оптимизировать алгоритм, он распараллеливается, хотя распараллеленная версия на самом деле требует в 10 раз больше ресурсов, чем однопоточная, что, в свою очередь, требует в 10 раз больше ресурсов, чем оптимальное.

FlashPlayer был разработан для определенного набора задач, и создание контента для Flash Platform настолько просто, что это просто хорошее решение, и нет никакого риска, что SWF полностью исчерпает все ваши ядра.

В конце концов, это политическое решение, и я на самом деле доволен им. FlashPlayer имеет очень простую модель исполнения и рендеринга, не может работать в тупиках или условиях гонки и может блокировать только одно ядро. Это похоже на решение о том, что любой вызов должен завершиться через 60 секунд. Я видел, как много людей спрашивают, почему. Ну, потому что людям, подобным мне, не нравится идея зависания графического интерфейса более минуты.

Greetz
back2dos

1 голос
/ 15 июня 2010

Просто нет, в ActionScript нет встроенного способа создания потоков. , Вы можете проверить этот вопрос для имитации поддельных псевдо-потоков.

0 голосов
/ 16 июня 2011

Чтобы сохранить барьер для входа на низком уровне, поскольку потоки часто вызывают больше головной боли, чем полезности для начинающих программистов. Flash часто используют люди, которые просто хотели WOW-фактор, и поэтому Adobe, вероятно, приняла политическое решение, чтобы минимизировать объем поддержки, которую они должны были бы предоставить.

В идеале они должны поддерживать фьючерсы / обещания (которые я обнаружил, читая о языке Io), в основном, асинхронные функции. Как упоминал Р.Дж. Оуэн, было бы идеально, если бы веб-работники работали в фоновых потоках, а не блокировали поток пользовательского интерфейса.

Но на самом деле для Adobe это довольно сложно, поскольку модель исполнения тесно связана с графическими возможностями. Исходя из базового понимания архитектуры, flash player vm считывает только предварительно скомпилированные байт-коды, работающие в однопоточной модели, поэтому Adobe должна была бы радикально что-то изменить, чтобы это работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...