vcxsrv轉發vbox的vs code莫名卡頓,誰的鍋,怎麼解決?

網卡是host only,virtio-net,,,,,,,,,,,

環境變數在虛擬機裡面hard code的,,,,,,,,

虛擬機有xfce4,但是沒開,所以這不影響吧


X11 Forward 轉發的是什麼? X11 協議的消息。

想當年 X11 程序發送的是什麼消息:「在 x,y 繪製個字元 a」 ,「在 z, w 繪製字元 b」 ,「在 o, p 到 q, r 繪製個矩形」這種。節約帶寬,但是丑啊。。。

TCP/IP 協議表示:這些東西,小 case 啊!

現代程序呢,為了 eyecandy 還有對渲染的完全掌控,是這樣的:「把下面這個點陣圖貼到 x,y 處,(以下省略幾十萬位元組的不壓縮點陣圖),把下面這個點陣圖貼到 z, w 處,(以下省略幾十萬位元組的不壓縮點陣圖),把下面這個點陣圖貼到 o, p 處,(以下省略幾十萬位元組的不壓縮點陣圖)「

(你問我為什麼不壓縮?壓縮了的話如果是本機有人嫌辣眼睛怎麼辦?)

TCP/IP 協議表示:你這負擔太重,我玩不起。。。啊。。。累死了。。。

而在本機上(準確地講,同一個 POSIX 兼容操作系統內核下),窗口程序和 X 伺服器通過 UNIX 協議通信,負擔降低了不少。

然後還有 XShm,直接用共享內存避免複製點陣圖。

效果:「把點陣圖 A 貼到 x, y,把點陣圖 B 貼到 z, w,把點陣圖 C 貼到 o, p「

然而。。。 Shm 必須在本機上啊。。。不在本機上共享內存有毛線意義。。。

再後來,有些程序開始使用 OpenGL 渲染,然後在本機上, OpenGL 可以直接把渲染消息通過 DRI 傳給內核,然後交給顯卡,這個過程的帶寬也是很大的。

這時的消息是:」給我把點陣圖 A 貼到 0, 0「(點陣圖 A 是 DRI 渲染好的點陣圖)

至於網路透傳的情況下。。。AIGLX,每個 GL 調用都要通過網路傳輸,幀率僅供娛樂。

消息是:(我對 GL 不熟,不說了,反正比上面那個通信負載大很多)

具體到 VSCode (Electron) 上,它沒有第一種情況 (直接傳遞圖形數據給 X11 伺服器),大部分都是第二種情況(傳遞點陣圖給 X11 伺服器),有時第三種(GL),快得了才怪。

綜上所述:現代應用用你妹的 X11 透傳啊!去用 VNC 去!(VNC 可以傳輸壓縮點陣圖,而且不會有大量繪製消息的 overhead)

(不過 xterm 這種程序倒是可以透傳,因為它就是基於傳統的 X11 協議傳遞字元的,字體渲染由 X11 伺服器負責)


推薦閱讀:

什麼編輯器適合寫Vue?
visual studio code 可以配置c++ 一鍵編譯運行嗎?
為什麼visual studio code 沒有uwp版本?
Visual Studio Code會開源嗎?
如何評價 Visual Studio Code?

TAG:Linux | Xorg | ArchLinux | VisualStudioCode |