关于多线程存取数据库(200分)

  • 主题发起人 主题发起人 toxing
  • 开始时间 开始时间
T

toxing

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个服务端程序,有两个线程,一个定期发送信息,一个接收用户请求发送信息。
两个线程都可以使用了一些相同的存储过程和query获得应该发送的内容,这时我应该
如何设计session和database的使用?是应该使用多个session和database还是只用一个?
若是多个是应该每个用户创建一个还是可以共享几个session?
 
每个线程都要保证有一session
 
问题是我使用了一些相同的存储过程和query,那我是不是应该创建一个线程类,封装这些
存储过程和query,在不同的线程中调用以让它们在不同的线程中运行?
 
GOOD IDEA,应该把他们分开。
 
再加个菜鸟问题:我每个线程中是不是都要有一个database。另外,如果每次发送都要起个
线程连接一次数据库,性能不是很差?
 
多线程数据库访问要注意两点:
1.每个QUERY都要与之相关联的独立的Session,若使用了TDatsBase,也要单独。
2.不能在自己的线程里直接与TDataSource控件相连,而要在主线程或Synchronize方法
中连接DataSource。
详细例子可参见Delph5/demos/db/BKquery
 
Delph5/demos/db/BKquery???
!!!!!!!!111
 
看到过资料说用ADO方式可以避开用SESSION
好象就是在大富翁?记不起了.
到底对不对?
 
众位大侠说得有理,可是性能问题怎么解决比较好?我是设想在每个线程都设置一个
session和database,作为参数传入公用函数中,但这样里面的query和存储过程好像
就无法prepare了,对吗?那我每次调用这些函数都得prepare一次,性能也不行吧。
因为这个程序对性能要求比较高,请大侠们在这方面多给些意见。
 
Query一个Session database的公用一个
不必同步线程,连线程不同时操作一个东西
可看成,线程级安全Synchronize(影响效率)用它
和单线程效率差不多
 
yubo:我的线程里肯定可能同时操作一部分表啊。现在我是用了个临界区变量来保证异步
使用这些query,不知道有没问题?
 
使用临界区会降低多线程的效率,使用临界区时
其实是单线程运行的,你的程序只要不同时操作
同一条记录可以不用同步,即便是这样。
多线程对于数据库来说只是,多用户的共享冲突
问题。数据库回替你解决的。
 
yubo:对数据库而言是能解决共享冲突问题,但我的应用中如果不用多线程,
在调用query时会有问题吧?我看了别的帖子,好像是会自动创建新的应用程序实例去
启动新的session?那不是更糟糕?
 
使用bde是不合适的,建议你使用ado.
至于发送和接受,还是分开的为好!
我认为你不需要考虑多线程,socket或udp本身就是多线程的
 
kkufo:已经用bde编得差不多了,没法改ado。:(
但socket我若不设threadblock的话,还是在主线程里的。见我的另一个问题:
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=496295
 
虽然答案不怎么让人满意,但放这么久了,还是把它结束吧。
 
后退
顶部