把在 Linux 和 Mac 上 terminal 的設定也搬到 Windows 上,
方便操作。
Windows Terminal 功能 用 Windows terminal 可以
啟用多個分頁 (在多個 Linux CLI、Windows CLI、PowerShell等之間快速切換) 自訂按鍵 (開啟或關閉分頁、複製+貼上等快速鍵) 使用搜尋功能 自訂佈景主題 這些功能比原生 WSL 能支援的多的多,
也可以設定的和我在 Linux 或 Mac 的開發環境比較相似,
於是就決定選用 windows terminal 了。
Windows terminal 設定 到 Microsoft store 搜尋 Windows terminal 並安裝完成後,
就可以開始設定 Windows terminal。
將 WSL 設定為 Windows terminal 預設開啟環境 在 windows terminal 的 [V] 箭頭選單選擇"設定(settings)",
會出現一個 JSON 檔可以修改,
從 profiles 的 list 找到想要做為預設的 Linux distribution,
工作的時候習慣用 Linux 或 mac 的 terminal,
找了個時間在家裡的 PC 上把 WSL 的環境也設定一下方便切換工作環境。 WSL 2 和 WSL 1 的差異 WSL 2 是基於 Hyper-V 在 virtual machine 中跑完整的 Linux kernal,
WSL 1 則是在 Windows 系統上對 Linux 功能的模擬,
因此 WSL 2 比 WSL 1 支援更多 Linux 原生的功能和 system call。
如果需要用到 Linux 底層的應用,
WSL 2 支援的能力比 WSL 1 更好。
一般情況下 WSL 2 啟動 process 的效能也更好,
但需要讀取 host 系統的檔案時除外。
但因為 WSL 2 是在 VM 上跑 Linux kernal,
Shallow Copy 複製越少越好,
Shallow copy 出來的新的 structure 擁有跟舊的 structure 相同的結構,
並一起共享 elements。
舉個 Java 的例子,
int[] arr1 = {1, 2, 3}; int[] arr2 = arr1; arr2 就是一個 arr1 的 shallow copy。
一旦其中一個 structure 更動了 element 另外一個也會受到影響。 Deep Copy 全部複製,
Deep copy 出來的 structure 不但有跟舊的 structure 相同的結構,
還把舊的 structure 的 elements 全部複製了一份給新的。
int[] arr1 = {1, 2, 3}; int[] arr2 = new int[arr1.length]; for (int i = 0; i < arr1.length; ++i) { arr2[i] = arr1[i]; } arr2 是 arr1 的 deep copy。
Array 固定大小的連續記憶體空間所構成
優缺點 不能像其他 C++ container 那樣動態改變儲存空間的大小 random access 很有效率 (O(1)) Vector 可以動態改變儲存空間大小的 array
底層實作方式 動態的 allocate array,
當目前的 capacity 不夠大的時候就重新 reallocate 一個新的 array 然後把舊的 element 搬過去 實際上的 capacity 會比目前塞進 vector 裡面的 element 數量大 優缺點 random access 很有效率 (O(1)) 在尾端加入或刪除 element 相對有效率 在不是尾端的地方加入或刪除 element 比較慢 Deque Double-ended queue,
一樣可以動態的改變 container 大小。
不同的 library 實作 deque 的方式可能會不一樣。
優缺點 可以當作是在 container 的頭和尾做 insert 和 delete 都一樣很有效率的 vector,
但不保證 elements 都被存在一塊連續記憶體空間 Reallocate 的時候比 vector 有效率 在不是頭或尾端的地方加入或刪除 element 比較慢 random access 很有效率 (O(1)) List 底層實作方式 Doubly-linked list
接上一篇 Docker 操作紀錄 (一)
Docker 基本使用 刪除 Container 記得先用 stop 停止 container 才能刪。
docker rm CONTAINER_NAME 或
docker rm CONTAINER_ID 刪完之後可以用
docker ps -a 確認一下是不是 container 就消失了。
用之前 Export 過的 Container 建立 image 之前 export 過一個 container 出來叫 c_test.tar,
可以用它來建立一個新的 image:
cat c_test.tar | docker import - ubuntu_test_repo:1.0 後面那個 ubuntu_test_repo 是 repository 的名字,
1.0 是 tag,
可以用
docker images 列出來看一下。
有了 image 就可以建立新的 container 了。
刪除 Image 如果我用
docker images 列出的 image 有這些:
設計比較大流量的系統時早晚要遇上 cluster 的問題。
Cluster 一台以上的機器(node)組成的集合,
有三種不同的目的:
Load Balancing 讓多台機器一起盡可能的平均分擔任務,
加速應用程式執行。
High Availability (HA) 為了高可用性和備援,
如果其中一台機器突然掛了其他的機器可以接替。
High Performance Computing 高效能/平行運算系統,
簡稱 HPC cluster,
結合多台機器的硬體來增加運算能力,
用來解決單一一台機器不能解決的任務。
HA 運作模式 有很多種例如 N+1, N+M, …
但最常見的是 two-node cluster,
two-node cluster 有兩種運作方式:
Active-Passive Active-Acitve Active-Passive (AP) Master-slave 的設計,
正常狀況下只有 master (Active) 在做 service,
當 master (Active) 出現問題時 slave (Passive) 才接手,
等到 master (Active) 恢復正常狀態再換回來由 master (Active) 繼續處理 service
優點:
Fail-over 的速度快 設計跟設定都相對簡單 缺點:
沒辦法同時做 load balance 會浪費一些硬體 Active-Active (AA) 兩台機器都同時有自己獨立執行的 service (都同時是 Active),