# 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 中,以便快速存取和處理
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up