運用 bit-wise operator
x & (x - 1) == 0
在 C 語言中表示:
將字元轉成小寫: 免除使用分支
\ ' '
即可讓代表 32 的位元設為 1 ,達到大寫轉小寫的作用。& '_'
( _ = ), ^ ' '
來分別達到將字元轉為大寫和大小寫互轉不明白為何 lookup table 的內容是這樣設計,也不了解為何是乘上0x07C4ACDD 並向右位移 27 位元,想請老師幫忙解惑
常見雜湊函數作法:
TODO
想比照比較同頁面下方 "golden ratio 與非 golden ratio" 的實驗方法,觀察這四值種 hash function 在輸入為亂數時發生碰撞的情形
static
表示該 function 的有效範圍僅在同一個檔案內,避免到時候 linking 的時候有多個檔案擁有相同的函式名稱,造成重複定義。Threads
建立 threads 的成本比建立 process 更低
multitasking
切換成本較 process 低
Linux Thread State Transition
mutex | semophore | |
---|---|---|
出現時間 | 較晚 (2.6.16版) | 較早 |
解鎖 | 只能由上鎖的 thread 解鎖 | 可由原本的 thread 或是另外一個 thread 解開 |
可進入 critical section 之 thread 數量 | 1個 | 多個 |
應用場景 | 常使用在 critical section 只能有一個 thread 進入,而且要避免 priority inversion 的時候 | 常用在同步兩個 thread 或功能上面,因為 Semaphore 實際上使用的是 signal 的 up 與 down,讓 Semaphore 可以變成是一種 notification 的作用,例如 A thread 執行到某個地方時 B thread 才能繼續下去 |
priority inversion | 無 | 有 |
thread-local storage (tls): 給 thread 一個專屬的空間 (不和其他 thread 共享)
Native POSIX Thread Library (NPTL): 一對一
semophore
用 semaphore 控制總量、 mutex 控制 mutual exclusion
利用 Atomic Compare and Exchange 指令來實作 semaphore 和 mutex
pthread_cond_broadcast
(wake up all) or pthread_cond_signal
(wake up one)Before calling wait, the mutex lock must be locked and wait must be wrapped with a loop.
Tips: 如果 N
為二的冪, i % N
可以改成 (i++) & (N-1)
bitwise 操作
如何確保 fork 程式有東西可以合併?
mmap: 作業系統中讓多個行程存取同一個記憶體空間
多核處理器
Pthread barrier: 讓快的 thread 等慢的 thread
time stamp counter (TSC): 可接露 CPU 週期數,只要 CPU 開著,周期數必為單調遞增
增加取餘數效率的小技巧:
如果是對 2 的冪取餘數, 等於對 2 的冪 - 1 做 &
page alignment: 因為 page 是記憶體操作的最小單元,必須保證有 align,才能避免非預期結果
FUTEX_WAIT
FUTEX_WAKE
第十六周
在現代查表可能比 CPU 運算還慢約 50 倍,因此要避免查表
要學會懷疑、推理並做實驗驗證
面試要展現對公司的利益!
為何需要 boot loader?
因為 Linux kernel 太大,需要先初始化 DRAM。所以需要在 ROM 中初始化 SRAM,之後才能初始化 DRAM
mmap 和 mmap2其實功能差不多,只是 mmap2是給系統實作用
編譯器最佳化
bitwise AND 和 logical AND比較
logical AND 左側的 operator 是 false,右側的 operator 不會 evaluate (left-to-right evaluation)
biteise AND 則會左、右側 operator都會 evaluate
Redis