为什么会出现死锁

今天在阅读<<unix系统编程>>时,细细的阅读了多线程的编程,看完这一章节,思考了很多。


我在思考一个网站如何可以抵挡得住大的迸发量,我先罗列我应该会设计的方案,然后再分析其中实现应该注意的地方:


首先如果数据量很大的话,我们是要分散请求的,也就是需要服务器来联合作战,当然这里我们就需要有一个好的轮询的算法,不然会出现数据无法保持一致而导致程序中隐藏bug,所以说,考虑的方面不一样写出的代码时完全不一样的,有些人更加注重代码维护,有些更加注重效率和安全,但是我们要以实际情况而定,这两方面都不要过分设计,否则你手下的程序员会恨死你的。这里不赘述。

在这我们对数据库的操作是不能直接对着的,不然你应该听说死锁,宕机,乐观锁,这些等等名词吧,所以很多人才用了缓存这些东西来做一个缓冲机制,缓存的学问很大,缓存做的过分了程序很难维护,就像锁锁的越细,占用资源越大,这是同一个道理,所以做合适的设计时多么重要。下面还是讲讲今天的主题,如何避免死锁来解决并发的问题。


当然,如果要想每一个订单都安全的如我们想象的那样,这是不可能的,事情总是会有意外情况。不能用理论来衡量的。但是我们可以保证百分之99.99就足够了,剩下的可以手工处理吗,如果一个并发网站我们在程序中就实现这种队列阻塞处理机制,队列是我们最常用的数据结构了,你可以对缓存中的数据利用队列,程序操作数据库的时候也实现队列机制,这样就可以避免并发直接对数据库产生冲击,如果你的网站真的像我这样说的进行设计,应该可以抵挡相当的访问量了。


这就是我看了多线程的感悟,当然也提高了对锁的认识,知道真正的为什么会有锁,会有乐观锁,悲观锁这些名词了。这里还想说说mysql数据库中的innodb引擎中支持事务,当然mysql的行级锁相对于锁定整个表粒度小多了,所以容易占用资源过大,我主要是想说这个锁的实现,今天在敲平衡树代码的时候发现了,其实锁并不是那么深奥的东西,其实就是一个标记罢了,之所以出现死锁,是因为多线程对资源的强占,你要我的,我也要你的,两人堵在路上谁都不让,所以死锁了。当然这个在程序中可以做保证的,可惜就是麻烦了程序员了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值