关于.net并发的问题,急急急。。。。。。
关于.net并发,有几个问题不是很清楚:
1、.net B/S架构的系统默认是单线程的还是多线程的?
2、开发的时候如果不做多线程,那如果同时有50个人提交报名信息到MS SQLServer,生成报名号并insert到数据库中会出现并发问题吗?(生成报名号的过程需要读取数据库中报名号后六位最大的记录),换句话说就是如果不做多线程,系统是不是按照顺序依次执行的?
3、事务的处理到底是在.net程序中实现还是在数据库中实现?两种有什么区别?------解决方案--------------------遇到并发的情况可以在数据库中处理,可以给表加锁,或者通过设置事务的隔离级别来处理
------解决方案--------------------1、.net B/S架构的系统默认是单线程的还是多线程的?
当然是多线程的。
2、开发的时候如果不做多线程,那如果同时有50个人提交报名信息到MS SQLServer,生成报名号并insert到数据库中会出现并发问题吗?(生成报名号的过程需要读取数据库中报名号后六位最大的记录),换句话说就是如果不做多线程,系统是不是按照顺序依次执行的?
程序有一个线程池,线程的执行顺序真不好说。
3、事务的处理到底是在.net程序中实现还是在数据库中实现?两种有什么区别?
是在数据库中,程序中的只能保证原子性,而数据库是保证完整性。
------解决方案--------------------楼主搞反了吧,正是由于是多线程的,所以才会出现你所说的同时插入问题。
这个可以用数据库的事务来处理,也可以在代码层处理。
------解决方案--------------------
会出现读取相同的最大值。所以要做好线程锁。
------解决方案--------------------
1、不全面,B/S 架构本身是没有所谓单或者多线程。单或者多线程关系到部署的web服务器和自己代码的编写方式
2、并发访问一般在于web服务器的并发处理带来的问题。程序自己写的多线程要注意资源同步的问题就行。
也就是说,即使你程序不使用线程,部署在web服务器上的应用依然会有并发的情况出现,因为web服务器大部分本身是多线程,当然也有多进程的如apache。
3、事务处理c#有api支持,不过本质上是映射为sql,最终在sql服务器上面实现事务
------解决方案--------------------
这里你所说的问题就是重复数据的问题,而事务可以解决你这个问题,但是会降低性能。
------解决方案--------------------MSMQ 消息队列
------解决方案--------------------业务逻辑层调用数据访问层从数据库读取后六位最大的报名号,根据这个报名号生成新的报名号...
问题应该出在这,数据库写操作的时候默认是会加锁的。是读取或者自己写的报名号生成的逻辑在线程上不安全。
------解决方案--------------------插入的时候,重新从数据库查询下报名号是否存在,如果生成的报名号存在的话 就给出提示撒、
------解决方案--------------------一般在输入报名号的时候就会去数据库里面查询下对应的这个号是否存在
------解决方案--------------------把流水号交给数据库生成不就行了?