1. 程式人生 > 其它 >Cygwin:windows下的Linux系統

Cygwin:windows下的Linux系統

Cygwin是啥?Cygwin是一個可原生運行於Windows系統上的POSXI相容環境。

是的,我又開新專輯了《零基礎swoole學習筆記》。不是我太貪心,而是最近半年和小夥伴一直在用swoole開發,踩了些坑,為了讓這些坑發揮餘熱,所以就有了這個專輯。

坊間一直流(zheng)傳(lun)“PHP譽為最好的程式語言,而Swoole讓PHP成為了最好的程式語言”,足以說明swoole對php的重要性。

PHP的優勢是簡單、開發效率高,可以快速實現產品功能。而作為一個動態指令碼語言並不是為計算密集的場景設計的,所以在面對服務端的高併發、IO密集型場景時就有點心有餘而力不足。

這時候Swoole誕生了,它使用純C語言編寫,提供了PHP語言的非同步多執行緒伺服器,非同步TCP/UDP網路客戶端,非同步MySQL,非同步Redis,資料庫連線池,AsyncTask,訊息佇列,毫秒定時器,非同步檔案讀寫,非同步DNS查詢,內建了Http/WebSocket伺服器端/客戶端、Http2.0伺服器端。

Swoole 使 PHP 開發人員可以編寫高效能高併發的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服務,讓 PHP 不再侷限於 Web 領域。而隨著Swoole4 協程的成熟將 PHP 帶入了前所未有的時期, 為效能的提升提供了獨一無二的可能性。

Swoole 可以廣泛應用於網際網路、行動通訊、雲端計算、 網路遊戲、物聯網(IOT)、車聯網、智慧家居等領域。使用 PHP + Swoole 可以使企業 IT 研發團隊的效率大大提升,更加專注於開發創新產品。

Swoole是服務端的框架,執行在Linux環境中,“工欲善其事,必先利其器”本專輯開篇的重點就是怎樣在Windows系統上搭建好Linux的開發環境(Mac使用者自行忽略)。

-·-  全文結構 -·-**

Cygwin是什麼
  • 1、Cygwin是什麼
    • *
  • 1.1、從軟體角度理解系統

計算機世界裡存在各種各樣的作業系統,目前通用作業系統有主流的三大類:

  1. UNIX,通用作業系統鼻祖,發展出特別多衍生系統;
  2. Windows,微軟家根基,桌面市場霸主;
  3. GNU/Linux,UNIX近親,有各種發行版如Ubuntu、CentOS等。

這些系統有各自的核心,出於系統穩定性考慮是不允許使用者程式直接操作核心,同時也將核心開發和應用軟體開發隔離開來,系統將必要的函式封裝成庫供應用軟體呼叫,約定的規範即為應用軟體介面(Application Program Interface,API)。

API函式庫是連線使用者軟體和系統核心橋樑,或者是“協議”,作業系統廠商寫好函式庫說明書,應用軟體開發者不必關心其內部是如何實現的,用的時候對照著API手冊查詢就夠了。

有了封裝庫的中間層,系統逐漸被劃分為多層。硬體基礎之上堆疊了系統核心、系統函式庫等中間層,在應用程式內部還可以繼續細分多個層次,這樣把終端使用者與硬體隔離開來,增強了抽象能力、遮蔽底層細節,也讓開發者分工,專注於各自層次的開發,同時降低了軟體遷移的難度。

  • 1.2、Cygwin的組成

先輩David Wheeler大神曾經說過:“All problems in computer science can be solved by another level of indirection(電腦科學領域的任何問題都可以通過增加一個間接的中間層來解決)”。

為了讓各個系統之間的API統一,IEEE牽頭制定POSIX標準。POSIX標準主要就是針對UNIX API而制訂,不管函式如何包裝、功能如何實現,但API按照標準約定來。目前Linux及Windows都部分相容了POSIX標準。

而Cygwin的作用就是在Windows中增加一箇中間層——相容POSIX的模擬層,並在此基礎上構建了大量Linux-like的軟體工具。

Cygwin將cygwin1.dll、函式庫、應用程式等檔案按照UNIX/Linux的目錄樹架構進行組織存放,如/bin、/usr、/lib、/etc、/var、/home等等都存在於Cygwin安裝路徑下,使用者從終端登陸進Cygwin的shell後,就可以像在UNIX/Linux系統那樣使用相同的命令、工具。

  • 2、Cygwin的優缺點
    • *
  • 2.1、Cygwin的優勢

在Windows開發Linux,常用的方法是安裝Linux系統或者虛擬機器,而有了Cygwin免去了這些麻煩。

首先它相對系統或者虛擬機器安裝及解除安裝方便,Cygwin提供了包管理工具,可按需安裝/解除安裝軟體包,一個能執行起來的最小Cygwin系統只需要幾十Mb。

而且Cygwin做到了原始碼級的相容性,GNU、UNIX、Linux軟體的原始碼幾乎不用修改就可以在Cygwin環境中編譯構建成功。

另外,Cygwin的程式執行與Windows互不干擾,高效的命令列工具與Windows圖形介面各有所長、形成互補。

Cygwin把Windows的磁碟掛載到/cygdrive下,如c盤就是/cygdrive/c、d盤就是/cygdrive/d,Cygwin中的應用程式可以讀寫Windows磁碟中的檔案,Windows應用程式也可以讀寫Cygwin目錄中的檔案(但要注意不要把檔案搞亂了)

Cygwin的shell中可以啟動Windows程式,Windows的cmd中也可以啟動Cygwin的程式,但由於字元編碼不同可能造成亂碼;多一套可用的API,對於Windows開發者,程式程式碼既可以呼叫Win32 API,又可以呼叫Cygwin API,甚至混合。

  • 2.2、Cygwin的劣勢

“吹噓”了這麼多優點,Cygwin也有一定的缺點,不過對於非系統級別的開發人員來講,基本上可以忽略。

一是由於是在Win32系統之上模擬實現POSIX相容層,應用程式在底層就多了一個層級的函式呼叫,效率比UNIX/Linux系統上原生的應用程式肯定低,不過這也是在效率和相容性之間選擇的一個平衡。

另外Cygwin未實現二進位制檔案級別的相容,Cygwin系統上的應用程式編譯後仍然是Windows PE格式的可執行檔案,UNIX/Linux系統上的二進位制可執行檔案在Cygwin上不能執行。

與Windows互操作不足,Windows原生程式並不能利用cygwin1.dll提供的與UNIX/Linux相容的訊號、pty裝置等,除非改寫程式程式碼重新編譯,但這樣新的程式就依賴於cygwin1.dll,就不是“Windows原生程式”了。

  • 2.3、Cygwin的應用場景

常見的應用場景包括但不限於:

(1)Shell命令列使用

Shell是UNIX/Linux的精華所在,骨灰級玩家可以做到不用滑鼠只敲命令完成所有工作,使用者最常用的大量命令在Cygwin下均可照常使用,在UNIX/Linux編寫的指令碼也可以幾乎不加修改地在Cygwin下執行。

(2)交叉編譯構建環境搭建

Cygwin環境中已移植好了gcc等開發工具,大量的交叉工具鏈(如arm-none-gnu-eabi-gcc、arm-none-gnu-eabi-binutils)也可以在Cygwin中製作,就算只有Windows原生版本的,Cygwin shell中也能呼叫,那麼利用Cygwin就能搭建起交叉編譯構建環境。

(3)程式移植

把符合POSIX標準的程式移植到Windows下,還有更多正在由個人、社群、商業公司、研究機構不斷貢獻的開源自由軟體,造福廣大Windows使用者,利用已有的GNU、UNIX、Linux軟體會使程式移植越來越容易。

(4)兼用POSIX API和Win32 API開發

有的開發者可能對UNIX/Linux和Win32的API都熟悉,兩套API也各有其優點,在Cygwin下開發者自己可以任意選取、混合使用。

  • 3、本地安裝Cygwin
    • *
  • 3.1、安裝Cygwin

1、進入Cygwin官方地址(http://www.cygwin.com/),下載安裝包(我也為小夥伴準備了安裝包,點選文末原文連結,提取碼:8q2a)。

2、點選安裝檔案,進行安裝,點選下一步。

3、根據實際情況,選擇本地安裝目錄及下載的檔案存放目錄,按照過程中為下載一些檔案,存放在指定目錄後,以便下次安裝時可以直接從該目錄讀取。

4、選擇“direct connection” ,點選下一步,填寫映象源。我安裝的時候用的是阿里雲的映象源(http://mirrors.aliyun.com/cyg...),其他開源映象站地址如下:

網易 http://mirrors.163.com/cygwin/

阿里巴巴 https://mirrors.aliyun.com/cy...

華為 https://mirrors.huaweicloud.c...

清華 https://mirrors.tuna.tsinghua...

中科大 http://mirrors.ustc.edu.cn/cy...

華中科大 http://mirror.hust.edu.cn/cyg...

東軟 http://mirrors.neusoft.edu.cn...

5、連結成功後,進行下一步,選擇要安裝的依賴包。Swoole開發環境下需要安裝的依賴包有:autoconf-archive;djgpp-gcc-objc;djgpp-gcc-objc++;gcc-objc;gcc-objc++;gdb;libc++-devel;libpcre-devel;libpcre2-devel;php;php-bz2;php-curl;php-devel;php-gd;php-json;php-mbsrtring;php-mysqli;php-pdo_mysql;php-phar;php-sockets

5、點選下一步安裝,剩餘的就是自動安裝,在結束時可能需要勾選兩個框,是圖示和快捷鍵的建立,自行選擇勾選。

5、點選桌面圖示,執行命令:cygcheck -c cygwin,可檢視安裝的版本情況。

  • 3.1、擴容Cygwin可用記憶體空間

1、電腦快捷鍵Win+R開啟電腦執行,執行:regedit,開啟登錄檔,選擇HKEY_LOCAL_MACHINE -> SOFTWARE -> Cygwin 新建Cygwin的QWORD(32位請選擇DWORD)

2、名稱位heap_chunk_in_mb,數值位2048MB(可自行選擇,不要太小,最好1G以上,也要看windows系統記憶體大小),重啟電腦完成。

到此就完成了