golang最為讓人熟知的併發模型當屬csp併發模型,也就是由goroutine和channel構成的gmp併發模型,具體內容不在贅述了,可以翻回之前的文章檢視。在這裡,要講講golang的其他併發方式。
golang不僅可以使用csp併發模式,還可以使用傳統的共享資料的併發模式。
這是傳統語言比較常用的的方式,即加鎖。加鎖使其執行緒同步,每次只允許乙個goroutine進入某個**塊,此**塊區域稱之為"臨界區(critical section)」。
golang為*臨界區(critical section)*提供的是互斥鎖的包和條件變數的包。
就是通常使用的鎖,用來讓執行緒序列用的。golang提供了互斥鎖sync.mutex
和讀寫互斥鎖sync.rwmutex
,用法極其簡單:
var s sync.mutex
s.lock()
// 這裡的**就是序列了,吼吼吼。。。
s.unlock()
lock和unlock
沒啥大的區別,只不過sync.rwmutex
更加細膩,可以將「讀操作」和「寫操作」
golang中的CSP併發模型
1.相關概念 使用者態 當乙個程序在執行使用者自己的 時處於使用者執行態 使用者態 核心態 當乙個程序因為系統呼叫陷入核心 中執行時處於核心執行態 核心態 引入核心態防止使用者態的程式隨意的操作核心位址空間,具有一定的安全保護作用。這種保護模式是通過記憶體頁表操作等機制,保證程序間的位址空間不會相互...
Golang併發模型 select高階
最近公司工作有點多,golang的select高階就這樣被拖沓啦,今天堅持把時間擠一擠,把吹的牛皮補上。前一篇文章 golang併發模型 輕鬆入門select 介紹了select的作用和它的基本用法,這次介紹它的3個高階特性。nil的通道永遠阻塞 如何跳出for selectselect 阻塞 當c...
python socket併發模型 非阻塞IO
設定將原本阻塞io變為非阻塞io 方法1 sockfd.setblocking bool 方法2 sockfd.settimeout sec from socket import from time import ctime,sleep f open log.txt a 日誌檔案 s socket ...