---
# System prepended metadata

title: Week4 Lab
tags: [python, ram, i/o, drive, disk, cpu]

---

# Week4 - I/O

- ### 什麼是 I/O Bound 和 CPU Bound 的程式？
- **I/O 繁重**：
    - 需要花費大部分時間在「輸入、輸出」操作上的程式。
        - 因此要等待作完成（如：讀取資料）
    - 決定速度的關鍵是：網路速度或硬碟讀寫速度，而非 CPU。
    - **解決方式**：著重非同步、優化程式效率
    - **使用實例**：電商網站操作 SQL 資料庫
- **CPU 繁重**：
    - 需要大量計算或需要頻繁執行的程式
    - 增加 CPU 的速度可以直接提高程式的效能
    - **解決方式**：優化演算法、加快 CPU、多執行緒、多進程、向量化
    - **使用實例**：電商網站操作 SQL 資料庫
e.g. 使用 Threads 加快爬蟲效率 => 一次啟動三個 Threads 同時爬取資料，完成速度快兩倍以上。

- ### Python 執行速度明顯比許多其他程式語言來得慢，為什麼 Pinkoi 以及為數不少的公司，仍然願意使用 Python 當作後端系統的解決方案？
    - 易於學習、使用
    - **可讀性與維護性**：語法結構清晰，程式碼的可讀性與維護性相對高
    - **適合資料驅動的公司**：有各種套件庫（NumPy, pandas, TensorFlow和scikit-learn）
    - 跨平台
- #### 後見之明
    - **社群支援**：龐大且活躍
    - 後端生態系完整 (django, flask...)


- ### 電腦中的記憶體(RAM) Main Memory 和硬碟 Disk or Drive 有什麼差別？

| 類型/比較 | 快取記憶體 (RAM)| 硬碟 (DISK/DRIVE)|
| -------- | -------- | -------- |
| 材料 | 半導體 | 磁性材料 |
| 儲存類型   | 揮發性記憶體  | 非揮發性儲存設備    |
|**關機會怎樣?** | 易失性存儲，資料會被清空  | 仍可被保存   |
| 用途 | 儲存當前正在執行的程式和資料 | 長期儲存系統、應用程式和使用者資料 |
| 讀寫速度 | **很快**，直接與 CPU 交換資料  | **普通**，需要過 I / O 控制器 |
| 容量 | **小** | **很大** |
| - 價格 | **高** | **低** |
| 讀寫方式 | 電子狀態 | 物理磁頭 |

- ### 請調查你自己的電腦，記憶體空間和硬碟空間各是多少？各值多少錢？
記憶體 32GB(RAM)，硬碟空間 1TB(994 GB 可用)
- ### 程式中什麼時候會使用到記憶體空間、什麼時候會使用到硬碟空間？

| 類型/比較 | 快取記憶體 (RAM)| 硬碟 (DISK/DRIVE)|
| -------- | -------- | -------- |
| 程式運行 | 讓 CPU 快速存取和執行程式指令 | 儲存資料，執行程式時給 RAM 處理 |
| 使用時機 | 需要儲存或操作資料時（例如：變數、陣列、物件等） | 儲存程式的原始程式碼和執行檔 |
| 使用時機 | 快取（緩存）和緩衝區 | 長期或永久性的資料儲存|
| - 實例| 網路讀取資料、啟動程式 | 操作資料庫中的資料、使用者的文件和設定、操作系統、應用程式、Cache|
| **RAM** 不足時...| 會改用硬碟 | 模擬RAM，稱為虛擬記憶體，但會很慢 |


- ### 程式中使用變數儲存一個整數 3 要使用多少記憶體空間？

#### 這取決於你的系統架構（32 位元或 64 位元）和你所使用的程式語言。
系統架構 ——
- 32 位元（4 位元組)
- 64 位元（8 位元組）記憶體（**已為主流**)

在 64 位元的系統中：
```python
import sys
sys.getSizeof(3)
```

| 類型/比較 | Python| C / C++ | JavaScript|
| -------- | -------- | -------- | ------|
| 程式運行 | 28 位元組 | 4 位元組（32 位元) 、8 位元組（64 位元) **int **  | 8 位元組（64 位元) |

*通常會在 4 到 28 位元組之間*

JavaScript 並不直接操作記憶體，而是透過宿主環境（如瀏覽器或 Node.js）來管理記憶體。

在 JavaScript 中都按照 IEEE 754 標準來儲存：8 位元組。
數字物件可能會使用更多，如儲存物件類型。
實際的記憶體使用可能會更多，因為需要儲存額外的 meta 資訊。
 
- ### 為什麼常見的電腦系統需要記憶體？難道不能直接存取硬碟空間來運作就好了嗎？
#### 效能太差
- 硬碟讀取和寫入的速度遠不如 RAM
- 當開啟應用程式或打開文件時，資料會被載入到 RAM 中，以便快速存取和處理