能不能把数据暴力的刷到硬盘上,当然是可以的,mongodb给我们提供了fsync+lock机制就能满足我们提的需求。 fsync+lock首先会把缓冲区数据暴力刷入硬盘,然后给数据库一个写入锁,其他实例的写入操作全部被阻塞,直到fsync +lock释放锁为止。 这里就不测试了。 加锁: db.ru ...
分类:
数据库 时间:
2017-03-08 19:01:17
阅读次数:
378
多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例 Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源,加锁是个重要的环节。因为python原生的list,dict等,都是n ...
分类:
编程语言 时间:
2017-03-06 01:24:21
阅读次数:
348
工作中经常会遇到争抢共享资源的场景,比如用户抢购秒杀商品,如果不对商品库存进行保护,可能会造成超卖的情况。超卖现象在售卖火车票的场景下更加明显,两个人购买到同一天同一辆列车,相同座位的情况是不允许出现的。交易系统中的退款同样如此,由于网络延迟和重复提交极端时间差的情况下,可能会造成同一个用户重复的退... ...
分类:
其他好文 时间:
2017-03-05 19:14:52
阅读次数:
222
在开发过程中,很多时候都需要用到原子的递增递减操作;而我们知道,常用的i ++ 和 i -- 等操作都不是原子的,它包含了三步操作(读-改-写):首先,读取变量i的值,其次将i执行 +1 或者 -1 操作,最后,将计算后的结果赋值给i;通常情况下,只有加锁才能保证 i ++ 和 i -- 等操作的原 ...
分类:
其他好文 时间:
2017-03-03 20:32:06
阅读次数:
174
多线程同时存和取公共变量容易导致崩溃,这个很好理解。那么只是同时调用普通的setter方法呢? ARC环境测试代码如下,变量都是@property属性 对setter方法进行加锁就可以避免崩溃 MRC测试代码 一个特例: ...
分类:
编程语言 时间:
2017-03-01 12:02:15
阅读次数:
213
多线程如何通信,同步? 1)通信: 共享内存/消息队列 2)同步: 访问时加锁/消息队列 JMM采用共享内存以及访问时加锁。JMM决定一个线程对变量的写入何时对另一个线程可见。 Java中,静态变量/实例变量/数组元素都分配在堆中,而局部变量/方法参数/异常变量分配在栈中。线程共享堆,但是独有栈。所 ...
分类:
编程语言 时间:
2017-02-27 23:24:06
阅读次数:
348
在上学期《操作系统》这么课中,我们学习了锁的机制。所谓锁,就是把一个资源用一个锁锁起来,不允许其他任务使用。换句话说,就是防止多个任务竞争共享资源,导致程序出错。 项目中,我们需要做的是通过对公共资源进行加锁来实现对资源的限制访问,但是在实现锁的过程中,发生了错误。 我发现加了锁之后,其他任务在程序 ...
分类:
其他好文 时间:
2017-02-27 20:49:06
阅读次数:
213
1范畴 乐观锁和悲观锁是使用数据库过程中的概念。 2 悲观锁 在数据处理的整个过程中,数据库都处于锁定状态,使用数据库内部提供的锁机制。 3 乐观锁 乐观锁就是不加锁,让用户去同时操作,当用户要提交了,这个时候看数据是不是还是没有更新,如果没有更新,那么直接合入,如果更新了,就告诉用户,让用户决定应 ...
分类:
其他好文 时间:
2017-02-27 19:20:33
阅读次数:
163
共享锁【S锁】又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 排他锁【X锁】又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A, ...
分类:
其他好文 时间:
2017-02-23 13:48:55
阅读次数:
181
一、实现单例模式的需要的条件: 1,有私有的构造器; 2,一个静态方法; 3,一个静态变量。 二、实现单例模式的两种方法: 第一种:急切实例化 第二种:双重检查加锁 三、注意事项: 1,如果程序中有两个或两个以上类加载器,不同的类加载器可能会加载同一个类,从整个程序来看,同一个类会被加载多次。 因此 ...
分类:
其他好文 时间:
2017-02-20 11:00:03
阅读次数:
170