社区
C++ 语言
帖子详情
有没有必要用多线程?
wx376752150_1
2011-08-05 01:34:51
我要做个服务器,收到一个连接请求,就开辟一个线程,线程的主要任务是从数据库中获取数据(数据量比较大),也就是说io会很长,我想知道,此时用多线程和单线程是不是效率差不多呢?系统在做io的时候是不是由专门的DMA做操作?在做io的时候是不是其他线程阻塞在哪里等着轮到自己做io呢?
...全文
143
13
打赏
收藏
有没有必要用多线程?
我要做个服务器,收到一个连接请求,就开辟一个线程,线程的主要任务是从数据库中获取数据(数据量比较大),也就是说io会很长,我想知道,此时用多线程和单线程是不是效率差不多呢?系统在做io的时候是不是由专门的DMA做操作?在做io的时候是不是其他线程阻塞在哪里等着轮到自己做io呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
用多线程吧,可以同时接好几个请求
为什么要使用
多线程
?
多线程
的优点和缺点是什么?
首先说下
多线程
出现的原因: 为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用
多线程
的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等
多线程
的好处: 1.使用线程可以把占据时间长的程序中的任务放到后台去处理 2.用户界面更加吸引人,这样比如用户点击了一个按
一、
多线程
是什么?为什么要用
多线程
?
多线程
是什么? 在介绍
多线程
的时候,我们首先要知道什么是线程,而要了解线程还要了解进程。 1.进程:一个正在执行中的程序,每个进程执行都有一个执行顺序,该顺序是一个执行路径,或者是一个控制单元(个人偏向这种 )。 2.线程:进程中的一个独立控制单元,线程在控制进程的执行。一个进程中至少有一个线程。 3.
多线程
:一个进程中不只有一个线程。 eg:比如我们开车从北京到上海,进程可以理解为我们在去的上海...
在单核CPU下,有
必要
存在
多线程
吗?
我们使用一个例子来说明问题,在单核CPU的情况下,存在4个需要执行任务,有如下两种情况运行方式: 使用
多线程
执行这些任务,会发生线程上下文切换。 一个一个任务按顺序执行完成。 上述两种情况,到底那个执行效率会快呢? 分析:第一种情况明显发生很多次线程的上下文切换,我们知道线程的上下文切换是很消耗性能的,而第二种情况发生的则是一个任务完成再执行下一个任务,基本没线程切换,那么讲道理,难道是第二种情况下更加快了,那么就抛出个问题在单核CPU下,有
必要
存在
多线程
吗? 我们需要清楚的认识到:
多线程
..
Redis 6.0 之后为何引入了
多线程
?6.0 之前为什么不使用
多线程
?
在 Redis 6.0 之前,Redis 是单线程的,这是因为 Redis 的设计目标是高性能和高并发,而单线程模型可以避免
多线程
带来的线程切换和锁竞争等开销,从而提高 Redis 的性能和并发能力。此外,Redis 的单线程模型还可以避免
多线程
带来的复杂性和不稳定性问题,使 Redis 更加简单和可靠。然而,随着 Redis 的应用场景越来越广泛,数据量和并发量也越来越大,单线程模型已经无法满足需求。因此,在 Redis 6.0 中引入了
多线程
模型,以提高 Redis 的性能和并发能力。
【Java】为什么使用
多线程
?
使用
多线程
的理由之一是和进程相比,它是一种非常花销小,切换快,更"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。使用
多线程
的理由之二是线程间方便的通信机制。
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章