通常我们在处理web程序的时候,对应一些公用数据的操作,都会进行加锁处理,主要是为了防止并发时造成的数据错乱。现在编写了一个控制台程序,来处理一批数据,希望如果开启两个控制台程序的时候,这两个程序分别来处理这一批数据,以此类推如果是开起三个控制台程序就3个并行处理。但是中间会引发一些问题,如何防止开启的程序,他们所处理的数据都是不重重。虽然说可以在获取到数据的时候加一个标签标记数据已经被程序占用。但是如果这两个程序在同一时间都来获取这个数据,这个时候如何处理。因为这个时间点这点数据并没有被其他程序标记为占用。而这两个程序好像又不能通过锁的形式来处理并发。
是否有一种方式可以通过类似于web 多线程里面加锁的方式来限制多可独立启动的客户端不能同时获取同一条数据。
虽然说可以在获取到数据的时候加一个标签标记数据已经被程序占用。
保证这个操作的原子性就可以解决问题
1,可以把多进程改为多线程,毕竟线程处理锁容易一些;
2,我想到一种方法:
每个处理进程对一一个队列,专门再起一个进程负责往N个队列中放数据。
部署在同台机器上的话用mutex就可以解决,部署在不同机器需要额外找个玩意来做临界量,比如db/nosql
如果蛋疼的话可以看下paxo等协议实现下。当然按照楼上的用队列进行隔离也是很简单的方案