併發程式設計之生產者消費者設計模式

2021-09-25 10:23:34 字數 1463 閱讀 2043

在併發程式設計中使用生產者和消費者模式能夠解決絕大多數併發問題。該模式通過平衡生產線程和消費執行緒的工作能力來提高程式的整體處理資料的速度。

什麼是生產者消費者模式

生產者消費者模式是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者要資料,而是直接從阻塞佇列裡取,阻塞佇列就相當於乙個緩衝區,平衡了生產者和消費者的處理能力。

這個阻塞佇列就是用來給生產者和消費者解耦的。縱觀大多數設計模式,都會找乙個第三者出來進行解耦,如工廠模式的第三者是工廠類,模板模式的第三者是模板類。在學習一些設計模式的過程中,如果先找到這個模式的第三者,能幫助我們快速熟悉乙個設計模式。

**示例:

public

class

message

public string getdata()

}public

class

messagequeue

public

messagequeue

(int limit)

public

void

put(message message)

throws interruptedexception

this

.queue.

addlast

(message)

; queue.

notifyall()

;}}public message get()

throws interruptedexception

message message = queue.

removefirst()

; queue.

notifyall()

;return message;}}

public

intgetmaxlimit()

public

intgetsize()

}public

class

consumerthread

extends

thread

@override

public

void

run(

)catch

(interruptedexception e)}}

}public

class

producerthread

extends

thread

@override

public

void

run(

)catch

(interruptedexception e)}}

}public

class

clienttest

}

golang 併發程式設計之生產者消費者

golang 最吸引人的地方可能就是併發了,無論 的編寫上,還是效能上面,golang 都有絕對的優勢 學習乙個語言的併發特性,我喜歡實現乙個生產者消費者模型,這個模型非常經典,適用於很多的併發場景,下面我通過這個模型,來簡單介紹一下 golang 的併發程式設計 協程go golang 為併發而生...

golang 併發程式設計之生產者消費者

golang 最吸引人的地方可能就是併發了,無論 的編寫上,還是效能上面,golang 都有絕對的優勢 學習乙個語言的併發特性,我喜歡實現乙個生產者消費者模型,這個模型非常經典,適用於很多的併發場景,下面我通過這個模型,來簡單介紹一下 golang 的併發程式設計 協程go golang 為併發而生...

併發程式設計之生產者消費者模型

在程式執行中,例如 爬蟲.1 從網路上爬取資料,這個階段,由於網路原因,一般速度是比較慢的 2 在這些資料中篩選我想要的東西,cpu執行速度很快,這個過程就是比較快的 那麼這樣子執行下來就會造成,我十分鐘爬取到的資料,我花一分鐘就處理完了.這就造成了,cpu要長時間在等待資料的到來.在我們實際生活中...