下面我就個人觀點猜測一下,並行運算將會怎樣支援前端javascript的.
1 不太可能的進化
顯示執行緒的支援
如果在Javascript中支援顯示執行緒,那麼可能是一種災難,目前的瀏覽器解析Javascript並執行都是在瀏覽器的ui執行緒中工作的.
比如你可以在Javascript中執行while(true),這時瀏覽器介面就會停止響應.或者通過我之前的文章(編譯Javascript引擎,為JavaScript提供睡眠功能:)瞭解UI介面被阻塞的過程.
另外如果顯示支援執行緒必然也會支援執行緒間資料同步的同步原語功能,那就會出現這樣的問題:
在一個函式中獲取鎖,而在另一個函式中釋放鎖,但是如果另一個函數出錯怎麼辦,或者另一個函式是從另一個檔案中引用的,又碰巧那個檔案由於某些原因(網路問題,編碼問題)沒有載入進來,這時就會發生死鎖.
所以根據上面的一些原因,在JavaScript支援顯示執行緒還不太現實.
2 有可能的進化
隱式的並行支援
類似於openMP的巨集指令,
下面程式碼宣告並行運算FOR迴圈:
複製程式碼 程式碼如下:
#pragma omp parallel for
for (i = 0; i < N; i++)
a[i] = 2 * i;
這種方式可以避免前面遇到的各種麻煩,並行的運算被託管於Javascript引擎內部,所以Javascript引擎有更多的空間處理優化這些並行運算,比如在內部呼叫openMP,Intel TBB的並行功能.
所以我推測這種方式將會很可能被採用.
3 處理並行異常
由於Javascript程式碼被隱式託管於並行執行緒處理,所以你可能不會馬上得到某個執行緒的異常狀態,而是要等到全部的執行緒執行結束後才會知道某些程式碼出現異常.
4 偵錯程式的進化
會產生支援執行緒感知的Javascript偵錯程式,能夠分析每個執行緒中的資訊,並且能夠凍結/恢復某個執行緒的`執行.
當然了,類似於firebug這樣的用Javascript指令碼寫的偵錯程式也將會有更大的提升,但是我想更理想的還是本地應用程式的偵錯程式將會成為主流,比如:visual studio.
5 結語
並行運算將會影響前臺Javascript的執行效能,很多用Javascript寫的前臺效果,Javascript遊戲的效能將得到改變與提升. 可是我會看到javascript的這種轉變嗎?
如果實在等不到,還是可以編譯現有的js引擎,並新增並行運算介面,然後自已釋出瀏覽器,讓客戶下載,多核的功能還是可能利用到的.
但是還要相容現在javascript規範,不然其它瀏覽器將不能識別你的程式碼,所以就需要在js引擎內部對原有序列程式碼分析,而且要準確,將可以轉換為並行的程式碼進行優化.我想這個任務還是很堅巨的.