- 相關(guān)推薦
運算將會(huì )怎樣支持前端javascript
下面我就個(gè)人觀(guān)點(diǎn)猜測一下,并行運算將會(huì )怎樣支持前端javascript的.
1 不太可能的進(jìn)化
顯示線(xiàn)程的支持
如果在Javascript中支持顯示線(xiàn)程,那么可能是一種災難,目前的瀏覽器解析Javascript并執行都是在瀏覽器的ui線(xiàn)程中工作的.
比如你可以在Javascript中運行while(true),這時(shí)瀏覽器界面就會(huì )停止響應.或者通過(guò)我之前的文章(編譯Javascript引擎,為JavaScript提供睡眠功能:http://www.cnblogs.com/ioriwellings/archive/2010/08/16/1800416.html)了解UI界面被阻塞的過(guò)程.
另外如果顯示支持線(xiàn)程必然也會(huì )支持線(xiàn)程間數據同步的同步原語(yǔ)功能,那就會(huì )出現這樣的問(wèn)題:
在一個(gè)函數中獲取鎖,而在另一個(gè)函數中釋放鎖,但是如果另一個(gè)函數出錯怎么辦,或者另一個(gè)函數是從另一個(gè)文件中引用的,又碰巧那個(gè)文件由于某些原因(網(wǎng)絡(luò )問(wèn)題,編碼問(wèn)題)沒(méi)有加載進(jìn)來(lái),這時(shí)就會(huì )發(fā)生死鎖.
所以根據上面的一些原因,在JavaScript支持顯示線(xiàn)程還不太現實(shí).
2 有可能的進(jìn)化
隱式的并行支持
類(lèi)似于openMP的宏指令,
下面代碼聲明并行運算FOR循環(huán):
復制代碼 代碼如下:
#pragma omp parallel for
for (i = 0; i < N; i++)
a[i] = 2 * i;
這種方式可以避免前面遇到的各種麻煩,并行的運算被托管于Javascript引擎內部,所以Javascript引擎有更多的空間處理優(yōu)化這些并行運算,比如在內部調用openMP,Intel TBB的并行功能.
所以我推測這種方式將會(huì )很可能被采用.
3 處理并行異常
由于Javascript代碼被隱式托管于并行線(xiàn)程處理,所以你可能不會(huì )馬上得到某個(gè)線(xiàn)程的異常狀態(tài),而是要等到全部的線(xiàn)程運行結束后才會(huì )知道某些代碼出現異常.
4 調試器的進(jìn)化
會(huì )產(chǎn)生支持線(xiàn)程感知的Javascript調試器,能夠分析每個(gè)線(xiàn)程中的信息,并且能夠凍結/恢復某個(gè)線(xiàn)程的運行.
當然了,類(lèi)似于firebug這樣的用Javascript腳本寫(xiě)的調試器也將會(huì )有更大的提升,但是我想更理想的還是本地應用程序的調試器將會(huì )成為主流,比如:visual studio.
5 結語(yǔ)
并行運算將會(huì )影響前臺Javascript的執行性能,很多用Javascript寫(xiě)的前臺效果,Javascript游戲的性能將得到改變與提升. 可是我會(huì )看到j(luò )avascript的這種轉變嗎?
如果實(shí)在等不到,還是可以編譯現有的js引擎,并添加并行運算接口,然后自已發(fā)布瀏覽器,讓客戶(hù)下載,多核的功能還是可能利用到的.
但是還要兼容現在javascript規范,不然其它瀏覽器將不能識別你的代碼,所以就需要在js引擎內部對原有串行代碼分析,而且要準確,將可以轉換為并行的代碼進(jìn)行優(yōu)化.我想這個(gè)任務(wù)還是很堅巨的.
【運算將會(huì )怎樣支持前端javascript】相關(guān)文章:
javascript分析運算符用法08-07
對javascript的理解08-08
常用的JavaScript模式09-22
Javascript的this用法簡(jiǎn)述08-15
JavaScript學(xué)習筆記08-24
JavaScript 基礎教學(xué)09-29
JavaScript的課堂講解09-03
JavaScript常用方法匯總10-25
JavaScript數組常用方法介紹09-04