通讯机制解决生产者消费者问题实现高并发
生产者与消费者这类经典的同步问题可以有很多方式解决。
利用信号量机制,利用管程机制解决问题。
今天来介绍一种新的解决生产者与消费者问题的方式--间接通讯机制。
先来看下代码实现。
package MM;
public class receive {
producer(){
message pmsg; //生产者产生的产品。
while(1) {
receive(token,pmsg); //token是生产者的缓冲区。接收是否缓冲区内有空间
pmsg=produce();
send(buffer,msg); //buffer是消费者的缓冲区。
}
}
consumer(){
message cmsg; //消费者消费的产品。
while(1) {
receive(buffer,cmsg); //buffer是消费者的缓冲区。接收是否缓冲区内有产品。
cmsg=consume();
send(token,null); //token是消费者的缓冲区。
}
}
const int capacity=n; //两个缓冲区公共长度。
main(){
create mailbox(token);
create mailbox(buffer);
for(int i=0;i<capacity;i++) {
send(token,null); //消费完缓冲区的产品
}
cobegin(proocucer,consumer);
}
}
相对于其他两种方式的特点:
1同步和通信同时实现
2多个产生者和消费者可以同时访问临界资源(邮箱)。从而实现高并发。
3因为具有两个缓冲区来实现同步,所以可以应用于分布式环境(生产者和token放在一个站点下,消费者和buffer放在一个站点下。)