原 初學python 協程 無鎖生產者 消費者

2021-09-08 08:38:16 字數 927 閱讀 2966

引言:前幾天看了一點infoq上大神們很多的總結,服務程式設計正規化以這樣的方式進化多程序--->多執行緒--->非阻塞--->協程。

說說協程,找了一些關於greenlet的資料,協程也稱作微執行緒,是比執行緒還小的一種執行體。

執行緒確實執行體就是乙個函式,在使用者空間看來,但是在核心中線程也是乙個程序,lwp所謂的輕量級程序,執行緒也存在自己的上下文執行環境。

協程不同於執行緒的是,執行緒是搶占式的排程,而協程是協同式的排程,也就是說,協程需要自己做排程。

看看乙個簡單的消費者&生產者模型的python**:

def coroutine(func):

def ret():

f = func()

f.next()

return f

return ret

@coroutine

def consumer():

print "wait to getting a task"

while 1:

n = (yield)

print "got %s",n

import time

def producer():

c = consumer()

while 1:

time.sleep(1)

print "send a task to consumer"

c.send("task")

if __name__ == "__main__":

producer()

這裡協程的排程是通過 send() 呼叫來傳遞任務,就是說,在producer執行期間,consumer是阻塞在 yield 表示式上。

每一次send()都會傳遞值給相應的任務給consumer.

比較好的開源協程庫 eventlet | greenlet 等

Python語言中的協程(生產者 消費者舉例)

協程又被稱為微執行緒,它的特點是不需要進行執行緒的切換,因為整個程式的執行過程中,只有乙個執行緒 沒有執行緒切換的開銷,和多執行緒相比較,執行緒數量越多,協程的效能就越高 它子程式的執行是由程式自身控制 又由於只存在乙個執行緒,所以不存在什麼變數共享等衝突問題,也不存在鎖機制,更不會出現死鎖的情況 ...

Python之程序 執行緒 協程(生產者消費者模型)

本篇主要總結一下非常有名的生成者消費者模型 概念引用 1 為什麼要使用生產者和消費者模型?2 什麼是生產者消費者模型?生產者消費者模型是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇...

單生產者單消費者迴圈無鎖佇列

ifndef cread write queue h define cread write queue h 佇列尺寸 define default queue size 12 max count 4096 size最大30 預設為12 templateclass cread write queue ...