《go程式語言》設計中案例,僅作為筆記進行收藏。併發非阻塞的快取系統案例,它能解決函式記憶問題,即快取函式的結果,達到多次呼叫但只須計算一次的效果。此案例通訊順序程序構建。
// func 是用於記憶的函式型別
type func func(string) (inte***ce{}, error)
type result struct
err error
}// 解決重複抑制的問題
type entry struct // res 準備好後會被關閉
}// request 是一條請求訊息,key 需要用func來呼叫
type request struct
type memo struct
// new 返回f的函式記憶,客戶端之後需要呼叫 close
func new(f func) *memo
go memo.server(f)
return memo
}func (memo *memo) get(key string) (inte***ce{}, error)
res := <-response
return res.value, res.err
}func (memo *memo) close()
// 監控goroutine中的cache變數
func (memo *memo) server(f func) )}
cache[req.key] = e
// 呼叫 f(key)
socket非阻塞通訊
fd 非阻塞需要多執行緒程式設計 服務端方式1 使用threading庫實現多執行緒 基本方法和單程序基本寫法一致,將收發部分封裝為函式以便開啟其他執行緒 import socket import time import threading defhandle socket conn,addr wh...
併發,同步,非同步,阻塞,非阻塞,執行緒
乙個cpu沒有真正意義的併發,兩個人同時做同樣的事情才是真正意義上的併發,只有統籌分時處理.多路同步 同步,實時處理並且活動按順序執行 非同步,乙個人合理的安排時間來做事情,分時處理,活動分段執行,非順序執行 阻塞模式,等,同步,併發,非同步都有可能會阻塞,只是機率的大小 非阻塞模式 不等 併發,併...
同步非同步?阻塞非阻塞?併發並行?
阻塞呼叫是指呼叫結果返回之前,呼叫者會進入阻塞狀態等待。只有在得到結果之後才會返回。非阻塞呼叫是指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。同步 在發出乙個同步呼叫時,在沒有得到結果之前,該呼叫就不返回。非同步 在發出乙個非同步呼叫後,呼叫者不會立刻得到結果,該呼叫就返回了。同...