B/S结构软件,是由谁来调度“资源争夺”,IIS?数据库?程序本身?
普通web程序放到IIS上运行
标题说得有点模糊,咱们也就不说什么临界资源了,举例说明,就谈论网上订票系统
A,B,C,D四个人,前三个都 买 北京->上海的票,而D是 退 北京->上海的票的,假如他们是同时刻访问网站的,而且他们没访问前,只有一张剩票,那么,A,B,C到底谁买不上票?
我猜想,估计是某个“机构”象操作系统进程调度那样,加他们到等待队列,对于数据库来讲,还是一个一个依次来。用PV操作那种做法来弄
那么我的问题是:如果我的假设是对的,那么上面的“机构”是谁,谁来调度的。是IIS,数据库,还是程序本身?
------解决方案--------------------很简单啊,最先由网速,然后由IIS接管,达到并发上限进行队列处理,再转到数据库服务器接管啊。
http://blog.csdn.net/cwbugs/article/details/7268267
------解决方案--------------------客户端和IIS都仅仅是发出了申请,真正起到调度作用的是数据库服务器。第一个到达数据库服务器的锁定请求被执行,然后其它请求都被拒绝。直到第一个锁定请求完成,(票一般就被买走了)然后其它请求都被告知无票了。
------解决方案--------------------
IIS确实可以并发处理,但是本质上,如果是单核的服务器,这个并发其实也只是假象,本质是还是排序的。。。
另外,数据库的读操作可以多人一起来,但是写操作一定是加锁的,并且具有原子性。。
所以,调度,先是IIS发出请求,然后数据库服务器的处理程序进行处理,这两步都很关键
------解决方案--------------------哪怕给你千万个核,你更改某个数据时照样是要排队的。
数据库确实会在写数据时给记录加锁,但这样程度的锁是解决不了问题的。要解决问题,你还得自己写事务,通过事务来完成整个的修改操作才行。
------解决方案--------------------没那么复杂,这个问题一般用数据库的事务机制实现,
用IIS/web application实现也不是不可以,不过很少有人这么做,也很麻烦,