flash模拟多线程的又一种想法
Flash Player 是一个多线程的软件,但它不提供多线程的API。在我们看来,它是单线程的。不知道你同不同意我的观点,欢迎讨论。你打开一个Flash Player(无论是运行在浏览器上的ActiveX,还是运行在桌面上的exe),我们把它看成是一个只有一个线程的进程。flash开发者们都十分希望能有两个或以上的线程为我们工作,因为这样能充分利用CPU和内存的空闲资源。好吧,我开启了一个Flash Player,得到了一个线程;我想得到两个线程,我就打开两个Flash Player吧!这两个线程(实际上是两个进程)如何协作呢?Flash Player提供了 LocalConnection API!嗯,说到这里,你应该明白我这一“flash模拟多线程”的想法和思路了。
甚至,你还可以:使用JavaScript动态开启和注销线程(说进程会更合乎情理)。我的意思是:当你刚开始打开一个网页时,只有一个swf,需要打开一个flash player即可。一旦你需要多一个线程来工作的话,你用JavaScript(swfobject是一个不错的选择)在网页上添加多一个swf(1像素大小就可以了,甚至想办法把它隐藏掉),也就是说你又打开了一个flash player。在这个网页上,总共有两个flash player进程在运行着,但你可以看成有两个线程在为你工作。如果你不需要后来添加的swf,你用JavaScript把它从网页上去除即可。通过这个方法,理论上你可以在同一页面上添加很多个swf,即开启很多个进程(线程)为你工作。
我不知道这是不是新玩法,也不知道这是不是稳定可靠的、安全可用的。感兴趣的不妨测试一下和留言讨论。
评论
是个办法,不过我觉得LocalConnection 是个足以让人抓狂的东西。
回复他(她)
Y.Boy Reply:
二月 1st, 2010 at 11:26
是使用麻烦,还是潜在很多问题?
回复他(她)
多进程和多线程毕竟不是一个东西,线程之间可以共享内存空间,可以相互阻塞。localconnection总感觉不安全
回复他(她)
Y.Boy Reply:
二月 1st, 2010 at 17:55
同感。
回复他(她)
不知道有无实现的具体案例, 刚刚我大致的想了一下, 好像有一个问题不能解决的是线程同步. 如果不能解决同步问题, 那么做出的结果就不是安全的
回复他(她)
Y.Boy Reply:
二月 1st, 2010 at 17:57
实例没有:(同步问题,可通过人为去解决。
回复他(她)
感觉不靠谱……看到ADOBE有篇文章是用Pixel Bender代替处理数据的,因为在FP里 跑AS的是一个线程,网络那块是一个线程,渲染那块估计也是单独一个。还有就是ixel Bender独立占用一个~有兴趣的可以用Pixel Bender试试~不过这东西和LocalConnection 一样让人感觉不好。还不太稳定。只能做试验了,,大数据量的时候也许就挂了,可能直接浏览器崩溃……
回复他(她)
Y.Boy Reply:
二月 2nd, 2010 at 10:40
你说得很对。在处理逻辑方面上PixelBender不方便,Pixel bender有待世人的发掘。
回复他(她)
flash“模拟”多线程,我觉得没什么实用性呢
回复他(她)
Y.Boy Reply:
二月 5th, 2010 at 12:46
目前我也用不着。
回复他(她)
我有一点实现,与你的想法是相同的!
回复他(她)
Y.Boy Reply:
二月 7th, 2010 at 14:02
能跟大家分享你的实现方法吗?
回复他(她)
这想法确实不错,有创意
回复他(她)
mop的某个网页游戏用的就是两个swf,一个用于存储资源之类的东西,一个用于主场景,然后用通信方式使用资源,我想也是这个道理,对于大型应用来说,这是不错的程序组织方式,也可以分得更多内存和计算资源。
回复他(她)
Y.Boy Reply:
二月 10th, 2010 at 14:03
感谢你提供了一个案例。
回复他(她)
flashplayer 确实是多线程的东西,例如可以同时使用 Loader 加载资源等等。不过具体能同时启用多少个 Loader,我还真不知道。不知道 y.boy 有没有这方面的经验,呵呵!
回复他(她)
Y.Boy Reply:
二月 26th, 2010 at 22:21
5个Loader。
回复他(她)
Y.Boy Reply:
三月 16th, 2010 at 17:10
应该是要看浏览器支持多少个下载并发。
回复他(她)
我们有一个项目大量使用了LocalConnection 感觉还是不那么靠谱
回复他(她)
Y.Boy Reply:
三月 2nd, 2010 at 09:55
看来LocalConnection还是少用才好。
回复他(她)
LocalConnection 效率太低了,我用LocalConnection做的DebugLoger,就是查看输出的,但是会出现明明已经调用了,但是延时很严重,汗
回复他(她)
Y.Boy Reply:
三月 17th, 2010 at 12:15
据说,LocalConnection 有90ms的延时。还有,推荐使用一款叫“De MonsterDebugger”的东西。
回复他(她)
呵呵,确实很强大,哈哈
回复他(她)
发表评论