有没有必要用多线程?

wx376752150_1 2011-08-05 01:34:51
我要做个服务器,收到一个连接请求,就开辟一个线程,线程的主要任务是从数据库中获取数据(数据量比较大),也就是说io会很长,我想知道,此时用多线程和单线程是不是效率差不多呢?系统在做io的时候是不是由专门的DMA做操作?在做io的时候是不是其他线程阻塞在哪里等着轮到自己做io呢?
...全文
143 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nickowen 2011-08-05
  • 打赏
  • 举报
回复
用reactor模型就可以了.
tompaz 2011-08-05
  • 打赏
  • 举报
回复
一个请求一个线程的话,数量大的话会开销太大
不如用epoll这种模式
pathuang68 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 freezezdj 的回复:]

看你的并发量了,如果并发量很大,要考虑epoll,IOCP,如果不大,多线程就OK。
[/Quote]

++
大大啊 2011-08-05
  • 打赏
  • 举报
回复
请求量高 就用 WSAAsynSelect IOCP模型。。等模型
jngd 2011-08-05
  • 打赏
  • 举报
回复
固定数量线程I处理IO

固定数量线程W处理交互

一个线程处理监听L
///////////////////
L线程收到任务交给W处理,W有IO交互扔给I处理,I处理完毕再扔回W处理.
冻结 2011-08-05
  • 打赏
  • 举报
回复
看你的并发量了,如果并发量很大,要考虑epoll,IOCP,如果不大,多线程就OK。
赵4老师 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wx376752150_1 的回复:]
引用 2 楼 jackyjkchen 的回复:
多线程效率高,前提是你的需求下并行IO会提高效率,有些并行IO效率只会下降(比如多线程并行拷贝文件)

网络那里的效率问题也不可小视,使用异步模型来提高效率吧


说的太好了,我就是想问,什么叫并行io?为什么比如多线程并行拷贝文件会效率降低?大仙赐教啊
[/Quote]
因为磁盘的磁头在磁盘上很多个不同位置跑来跑去读写不如钉在一个或两个地方从头读到尾或写到尾快。
tan625747 2011-08-05
  • 打赏
  • 举报
回复
多线程有对象引用,这样效率高些
wx376752150_1 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]
多线程效率高,前提是你的需求下并行IO会提高效率,有些并行IO效率只会下降(比如多线程并行拷贝文件)

网络那里的效率问题也不可小视,使用异步模型来提高效率吧
[/Quote]

说的太好了,我就是想问,什么叫并行io?为什么比如多线程并行拷贝文件会效率降低?大仙赐教啊
jingavin0 2011-08-05
  • 打赏
  • 举报
回复
多线程是好点,可以同时调用进程,单线程的话要一个完了再下一个,很容易死锁,而且时间还会托长
nickowen 2011-08-05
  • 打赏
  • 举报
回复
多线程和多进程主要处理并发模式. 用不用看你的并发量了.
线程做io时不会阻塞在那.
jackyjkchen 2011-08-05
  • 打赏
  • 举报
回复
多线程效率高,前提是你的需求下并行IO会提高效率,有些并行IO效率只会下降(比如多线程并行拷贝文件)

网络那里的效率问题也不可小视,使用异步模型来提高效率吧
ouyh12345 2011-08-05
  • 打赏
  • 举报
回复
用多线程吧,可以同时接好几个请求

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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