如何在多线程Socket中操作数据库。

u010212550 2015-08-11 07:07:48

背景:Socket是iOS即时通讯的服务端Socket。消息全部通过该服务端转发。
Socket是用的EMTASS2_1。通过3条线程处理,分别是 数据包处理线程,侦听客户端连接请求线程,资源清理线程。

现在的问题是,在数据包处理线程解析出消息之后,需要做数据库的查询与插入操作。可是数据库操作是很费时的啊。直接放在数据包处理线程里面真的好么?。 求高手指点指点,怪自己以前没学好多线程。
...全文
203 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-08-12
  • 打赏
  • 举报
回复
搜一搜异步socket 动态开线程 而不是开几个线程在那里循环死等
u010212550 2015-08-12
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
在.net中,你应该使用“系统线程池”来处理并发任务。你的进程中某个瞬间可能有4个线程,也可能有30个线程,也可能只有1个线程,这是系统线程池来自动决定的。实际上在其它的开发平台也有类似的机制,只不过可能是有一些很垃圾的博客和所谓“模式”中的一些“循环、阻塞、队列”之类的例子误导了一些程序开发人员。
谢谢大神的耐心回复。 本人对多线程的了解太浅薄了。 那我应该怎么写这个socket呢, 有没有已经写好的比较优秀的服务端socket架构?
  • 打赏
  • 举报
回复
在.net中,你应该使用“系统线程池”来处理并发任务。你的进程中某个瞬间可能有4个线程,也可能有30个线程,也可能只有1个线程,这是系统线程池来自动决定的。实际上在其它的开发平台也有类似的机制,只不过可能是有一些很垃圾的博客和所谓“模式”中的一些“循环、阻塞、队列”之类的例子误导了一些程序开发人员。
  • 打赏
  • 举报
回复
拿asp.net来做一个例子吧。如果你说asp.net有一个线程用来处理http消息,一个线程用来侦听客户端连接请求,一个线程用来调GC,那么你这个asp.net肯定会比真实的asp.net慢100倍,卡100倍,而且还会是不是产生full GC暂停。 所以那种坑爹的线程bug,往往都是这种很扯淡的“队列”思路造成的。“队列”概念看上去高大上,但是实际上不是多线程操作的目的。就算你把信息放入所谓的队列,然后立刻又要从队列 中拿出来进行并发处理(以免一个操作阻塞其它操作)。 多线程的asp.net才不会让一个页面处理中访问数据库慢而影响随后出现的其它千百个页面消息处理。
  • 打赏
  • 举报
回复
引用 楼主 u010212550 的回复:
通过3条线程处理,分别是 数据包处理线程,侦听客户端连接请求线程,资源清理线程。
这是个别坑爹的 java 语言培训班瞎编的流程。 在.net中,线程处理程序应该很短,例如几毫秒就结束。而不是弄什么3个线程在那里死循环着。 如果你这样设计,你就不可能纠结那种问题。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧