公司组织我们小组用完成端口开发Web Server目前内核已经完工,在400M Bytes/小时流量的公司主页上测试运行,比较稳定。而且比IIS节省CPU资源(约占了0.005的cpu)现在要让用户建立自己的个人档案,因此需要用到数据库,也许是SQL Server或者本地的Access数据库我的问题是,数据库访问的代码,是不是要单独开一个线程?
因为数据库的连接/访问需要等待,在等待的这段时间如果用worker thread来处理,完成端口的worker thread就会停滞,效率低下目前我的设想是,采用线程池。需要数据库访问的时候,到线程池去抓一个线程出来。worker thread继续等待下一个queue message。然后在这个线程里面访问数据库。等线程执行完毕以后挂起,回到线程池,同时给完成端口post一个queue message告诉它执行完了。然后worker thread接收到这个message再对这个用户继续进行下一步的处理。目前只是个思路,我们小范围讨论过。不知道这个办法是不是最优化的大家有没有更好的办法?提出来互相参考参考。大家各抒己见吧
因为数据库的连接/访问需要等待,在等待的这段时间如果用worker thread来处理,完成端口的worker thread就会停滞,效率低下目前我的设想是,采用线程池。需要数据库访问的时候,到线程池去抓一个线程出来。worker thread继续等待下一个queue message。然后在这个线程里面访问数据库。等线程执行完毕以后挂起,回到线程池,同时给完成端口post一个queue message告诉它执行完了。然后worker thread接收到这个message再对这个用户继续进行下一步的处理。目前只是个思路,我们小范围讨论过。不知道这个办法是不是最优化的大家有没有更好的办法?提出来互相参考参考。大家各抒己见吧
解决方案 »
- 郁闷了一天,GetClientRect返回的区域不包括ToolBar和StatusBar的区域
- 字符串是一个数学表达式,怎么才能知道他的值
- 关于日期的计算相距天数
- 急,请教文本区中字体和颜色的问题!!!
- 如何用代码调整静态切分窗口的大小?
- 求贝塞尔曲线的动态画法,急~
- ATL前途如何?!请正在工作中使用ATL的大虾进来现身说法,给小弟我一点信心!up有分!
- 真的要请教各位了,关于listctrl的问题!
- ODBC数据页超时如何改变设置, 没分了,对不起,改天奉上
- 请各位有经验的网友帮忙定位我的价值?
- 初学!请问WSASEND和SEND有什么区别和联系?
- 请问:可以在CEdit中输出特定的信息么?
API:
AddDB Job ( ... )Events:
Finish DB Job ( ... )
DB Job Err ( ... )
Other DB Err... ()
管理器 内部不一定一定要用多线程来解决. 只求稳定就行. 速度不是最重要的.因为对数据库
的访问本身就很慢. 当然在性能上,如果有特别的要求. 也是可以用多线程的.我也在做这些东东. *_* +U
但是数据库操作又会有很多不同的具体动作。
因此打算在一个类中定义不同的处理函数。比如目前想分成登陆/注册/保存用户信息这3个函数。当然以后会增加其他更多的函数线程池中抓到线程以后,给这个线程一个DWORD数据,告诉它应该做什么。线程执行的时候判断这个DWORD去执行相应的函数。
这个时候Worker Thread的循环就什么都不做,continue,继续GetQueuedCompletionStatus当数据库线程执行完毕的时候,就用PostQueuedCompletionStatus告诉完成端口的worker thread自己执行完了,让它继续进行网络操作。