當前位置:首頁 » 操作系統 » v8空間源碼

v8空間源碼

發布時間: 2022-11-04 21:47:50

㈠ qq空間v8代碼還能用嗎

以前6.0的代碼在V8空間主頁都用不了。

如果問題未解決可以繼續點擊【追問】,如問題已解決麻煩【採納】謝謝!!!

來自【QQ空間團隊】

㈡ 空間v8是什麼我為什麼會變成v8

您好,
QQ空間升級V8版本切換問題選擇字型大小:大 中 小
V8新增的功能有形象牆、天氣模塊、親密度、贊等功能,頭像也會較之前的更大,我們會不斷了更新V8的新功能,讓界面更美觀,使用更方便,請了解以下更新信息。

當前空間V8新版本即將全部替代6.0舊版,升級為新版本後現已無法再返回舊版本使用。任何軟體、產品都是有一個更新優化的過程,這既是我們對用戶負責,也是對產品功能進行優化完善。若對產品功能有更好建議可向客服反饋
望採納

㈢ 新手應該如何讀GoogleV8引擎源代碼

新手的不太建議讀v8源代碼。新手如果通過v8學c++,估計在成功編譯之前就放棄了。我記得某個v8的developer在wingolog一系列關於v8分析的文章(posts tagged "v8")的comment里,或者是Lars,曾經提到v8不是用來學的,因為它存在的目的就是為了最高性能,裡面用了大量的奇巧淫技,比如說small integer表示,比如說把浮點數轉化成字元串的Grisus3演算法(http://florian.loitsch.com/publications/dtoa-pldi2010.pdf?attredirects=0). 另外,處於速度考慮,v8和普通的編譯器/虛擬機不太一樣,沒有太多control flow analysis和data flow analysis(至少我看的時候是這樣)。

需要知道的是,Lars原來是做Hotspot VM的,裡面大量的思想來自大神Urs Hölzle。大名鼎鼎的on stack replacement,polymorphic inline cache等等完全可以在Urs Hölzle二十年前的博士論文里可以找的到,所以要看懂v8這些理論少不了; V8里的hydrogen指令更是用來自Hotspot的C1Visualizer可以看,所以我想如果要學習的話,還不如先看看wingolog的這一系列v8文章:posts tagged "v8",以及Urs Hölzle的博士論文和相關論文http://i.stanford.e/pub/cstr/reports/cs/tr/94/1520/CS-TR-94-1520.pdf,最後最好還要熟悉virtual machine的實現。比如各種GC演算法,不然看v8里的對象管理你就直接暈了。有了這些理論打底,熟悉一般的compiler和virtual machine implementation,而且還熟悉ecmascript spec,熟悉C++的話,倒是可以開始看了...但如果你這些都熟悉,那看v8幹嘛呢?給它做code review? 比較有意思的是這些理論都熟悉了,然後比較各種javascript的實現。比如在對象表示上mozilla就不是v8的smi tag,而是利用NaN boxing;比如是直接inteprete還是像v8那樣有highlevel IR和lowlevel IR;等等。

㈣ V8空間具體怎麼弄

V8空間還未正式使用,所以目前只有黃鑽用戶可以使用,過一段時間所有空間用戶都可以使用,望採納

㈤ qq空間的v8是什麼意思

空間V8是這個空間的版本已經是V8版本了、

V8版本是對於QQ空間有一定改善的QQ空間版本、

㈥ 新版QQ空間V8版本怎麼用代碼裝扮空間 我找不到了

好坑爹唷
一升級我斗後悔了 死難看了...T.T

㈦ 為什麼V8空間弄得文字代碼不能顯示,就像這樣,怎麼弄啊詳細點!

因為空間升級了8.0 所以這些代碼都不能用了。
那個東西已經不能做了
保存了 變成亂碼

㈧ v8虛擬機受線程限制嗎

v8的運行機制。分為以下這些東西

Context: 運行上下文,這在node啟動的時候就被初始化了(這個我沒怎麼看明白)

Isolate: 隔離域,代表一個v8虛擬機的實例,這是關鍵所在

HandleScope:句柄域,或者說是句柄集合,js對象存在堆中的引用,在c++中需要通過v8句柄(Handle)來操作js對象,HandleScope就是Handle的集合,當

一個HandleScope被釋放了之後,所有包含的句柄也被釋放,如果一個js對象在你的js代碼中無非被使用,例如

var zs=new Person();

zs=1; //此時剛剛創建的new Person();對象無法在js代碼中被使用

同時在c++代碼中也沒有任何句柄指向它的時候,這個對象就會被v8的垃圾回收器給回收,即清除其在堆中佔用的內存。

Handle: 上面已經講的很明白了,是c++中對js的引用。子類有Local和Persistent,後者在句柄域被回收時不會被回收,即v8會保留該對象的引用, 使其不被垃圾回收器回收。
Locker/Unlocker: Isolate的絕對線程鎖。

Context我不太了解,這里我不多做解釋

Isolate:
這個是關鍵中的關鍵,Isolate的存在,讓node實現js層面上的多線程成為了泡影,什麼是js層面上的多線程呢?就是說將一個js函數交給子線程去執行。首先我們看一下Isolate的注釋,翻譯過來大概是這樣的:

Isolate代表了一個v8引擎的實例。每一個Isolate維護自己內部的狀態。Isolate內創建的js對象無法在另一個Isolate中使用,v8允許創建多個Isolate並使它們並行運行在多個線程中。同一個Isolate同一時間只能在單個線程內運行。並且要求使用Locker/Unlocker使他們同步執行

1.Isolate內創建的js對象無法在另一個Isolate中使用。

這是什麼意思呢。我們在c++和js中創建的js對象,實際上是保存在了一個Isolate實例中,你可以把Isolate想像成一個堆,創建的js對象從這個堆上佔用內存。但是我建立在這個Isolate上的對象無法在另一個Isolate上使用。這就像是我有兩個js文件,分別兩次用node啟動,這兩個node程序無法使用對方的對象。

//1.js

var a=1;

//2.js

console.log(a); //很明顯這里是undefined,因為2.js中不存在a這個變數。

當然到這里還沒有問題,因為你可能會說我所有的線程共用一個Isolate就行了。那麼我們看下面一句話。

2.同一個Isolate同一時間只能在單個線程內運行

這句話的意思是說同一個Isolate在多個線程中只能是串列的,比如有主線程和線程a和線程b,Isolate退出了主線程,線程a才能使用這個Isolate,線程b又會等待線程a退出Isolate。這樣的結果是什麼呢,我用一段代碼來示例一下

//假設有一個函數thread.run(fn,args,callback); 在子線程中執行fn,並傳入參數args,執行完後執行callback回調

thread.run(function(){

console.log('子線程');

},null,function(){

console.log('子線程執行完畢');

});

while(true){

console.log('主線程一直在列印...');

}

//如果是正常的理解,應該會輸出如下結果

...

...(以上為省略)

主線程一直在列印...

主線程一直在列印...

子線程

...

主線程一直在列印...

子線程執行完畢

主線程一直在列印...

...

...

但是node做不到這樣,列印結果只能是

子線程

子線程執行完畢

主線程一直在列印...

主線程一直在列印...

...

因為fn,args,callback是定義在一個Isolate上的對象,這個fn想在子線程運行,主線程必須退出該Isolate,這個時候子線程才能接手去執行fn和callback,執行完後又把這個Isolate交還給主線程。

2.Locker/Unlocker
我叫他Isolate的絕對線程鎖。Locker能把一個Isolate鎖定在當前線程,讓其他線程無法使用。如果不使用Locker,子線程還是能夠使用主線程的Isolate,只不過是串列的,但是一個Isolate如果被Locker鎖在了一個線程,其他線程就絕對無法使用該Isolate。而Unlocker就是解開這個絕對鎖。

在不加鎖的情況下

//以下為子線程

Isolate* isolate; //假設這是從主線程傳遞過來的isolate實例

isolate->Enter(); //isolate進入當前線程,其他線程不允許使用該isolate

//...一萬步操作後

isolate->Exit(); //isolate退出該線程。其他線程現在可以使用了。

假設主線程加了鎖

//主線程

Locker(isolate);

isolate->Exit(); //主線程退出該isolate

//子線程

isolate->Enter(); //錯誤,錯誤信息原文不記得了,意思是沒有在適當的時候使用鎖。

3.v8的js對象管理
這是與多線程無關的一些話題,但是講到了v8我就想講一講。

前面我講過了Handle和HandleScope。學過c++就應該了解這是句柄的意思,沒有學過c++就把他想像成引用對象的引用。總之Handle不是一個js對象,而是

一個js對象的引用,通過這個Handle我可以操作一個js對象,並且在這個js對象沒有被任何Handle指向,如同前面的例子一樣,只不過換成了Handle而非js代碼

中的變數指向(這里其實是一樣的),總而言之,無法使用這個對象了,你的代碼里再也找不到這個對象了,v8的垃圾回收就會清楚這個對象。

1.創建v8的js對象

首先你必須有一個Isolate。前面已經講過了一個isolate就是一個v8的實例,相當於一個js的運行環境,你的所有js對象必須創建在這個Isolate上

v8::Isolate::CreateParams params(); //params指創建isolate對這個isolate的一些配置,這里我不做設置,只創建一個默認的isolate

(其實我沒有看有哪些參數- -||)

v8::Isolate* isolate=v8::Isolate::New(params); //根據配置對象創建isolate

v8::HandleScope handle_scope(isolate); //創建該isolate的句柄域,如果不創建,v8會提示沒有句柄域就創建了js對象句柄

v8::Handle<v8::String> js_str=v8::Handle<v8::String>::NewFromUTF8(isolate,"hello world");

//這句話創建一個句柄,該句柄指向一個v8::String對象,這個對象新創建並創建在剛剛的isolate中

//...一萬行代碼後

isolate->Dispose(); //釋放isolate,所有句柄被釋放,v8自動清空該isolate中的所有js對象。
基本上所有v8的js對象都是這樣創建 Handle<v8類型【v8::String,v8::Number等】>::New(isolate,值【int,char等】)

v8類型就是js中定義的類型,基本類型有

Value 代表任何類型

Object 代表Object

String 代表字元串

Number 代表數字

Boolean 代表布爾值

Function 代表函數
除此之外還有其他的類型
Promise 代表Promise
FunctionCallbackInfo 代表函數的argumen
4.Node是如何使用v8的
v8在js層面是無法支持多線程的,因為無法傳遞函數,對象可以通過參數json化傳遞,但是比較麻煩。node是c++層面上的多線程。
node可以分為兩個部分
v8
node api
舉個例子fs.readFile(path,encoding,callback);
js中調用這個函數的過程大概是這樣的
1.在主線程中將js變數的值轉換為c++的值,比如將path和encoding轉換為c++的字元串,並啟用c++子線程去執行readFile這個操作。
2.將該任務推入事件輪詢,設置該任務狀態為未完成
3.c++子線程io完畢,通知事件輪詢任務完成。
4.事件輪詢到該事件,將c++子線程的返回值轉換為在主線程isolate上的js值,並將這個值作為參數傳入回調函數,這個操作必須在主線程的isolate上執行。
也就是說node將v8的對象轉換為c++對象,子線程執行完畢後將結果轉換回v8對象。這兩次轉換必須在同一個isolate中執行。所以node的非同步只能提供基於c++的api而不能先實現node層面的多線程,歸根結底這是v8不允許這樣做。
5.總結
原本我是想做一個node的多線程插件,現在發現好像是不可能了。
isolate間的通信我想過很多,比如我要子線程執行的函數中包含一個當前isolate的js對象,我就將這個對象傳過去,並轉換為json,在c++中解讀出來,並在子線程中去創建新的isolate去轉換回js對象。這樣做是可以實現兩個isolate通信的,但是函數沒有辦法傳遞。而且在運行的過程中必須將所有的參數傳過去,這樣一來就無法使用js閉包的特性。要想做到這一點,可能需要改v8的源碼,但是我的c++並沒有那麼好,根本看不太懂。
關於threads_a_gogo這個模塊,他的api是eval(js代碼),這樣做等於是創建了一個新的上下文去執行這一段腳本。這樣做也是一樣的無法實現isolate間的通信,也就是說已經創建的函數和對象是無法使用的,只能使用一些基本的node內置的函數。
還有cluster,這個模塊是多進程模塊,這個模塊等於是啟動多個進程去共同執行同一段js腳本,但是各個進程之間是沒有關系的,進程a也無法使用進程b的對象和函數,也無法傳遞,所以說還是跨越不了isolate的限制。
所以說並不是node不想做多線程,而是v8限制了

㈨ 為什麼V8空間弄得文字代碼不能顯示,就像這樣,怎麼弄啊詳細點!

親~!V8空間已經修復了此BUG~所以就不能在用了!

㈩ 如何讓空間變成v8版本

QQ空間V8版本還在測試階段吧應該!目前的升級機遇是隨機發放的,只要你經常關注自己的空間,就很有可能看到,看到後升級就OK了。

熱點內容
汽修汽配源碼 發布:2025-05-14 20:08:53 瀏覽:742
蜜蜂編程官網 發布:2025-05-14 19:59:28 瀏覽:57
優酷怎麼給視頻加密 發布:2025-05-14 19:31:34 瀏覽:635
夢三國2副本腳本 發布:2025-05-14 19:29:58 瀏覽:860
phpxmlhttp 發布:2025-05-14 19:29:58 瀏覽:434
Pua腳本 發布:2025-05-14 19:24:56 瀏覽:449
蘋果像素低為什麼比安卓好 發布:2025-05-14 19:13:23 瀏覽:461
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:272
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:971
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25