社区
Linux/Unix社区
帖子详情
服务器接受的链接过多,该怎么处理
江东橘子
2011-06-17 05:01:12
加精
每当客户端有一个请求链接时,服务器就accept,然后建立一个线程;但是服务器新建的线程有上限,例如1000;
当同时有1500个请求链接时,服务器只能处理1000个请求,产生1000个线程,这1000个线程都处于忙碌状态;那么剩下的500的服务器改怎么处理?
方法:建立一个列队来存储这500个请求可以吗?我担心在等待服务器出现空闲线程时,等待时间过长,链接断开了
各位有什么好的方法来处理这个情况吗
...全文
2004
62
打赏
收藏
服务器接受的链接过多,该怎么处理
每当客户端有一个请求链接时,服务器就accept,然后建立一个线程;但是服务器新建的线程有上限,例如1000; 当同时有1500个请求链接时,服务器只能处理1000个请求,产生1000个线程,这1000个线程都处于忙碌状态;那么剩下的500的服务器改怎么处理? 方法:建立一个列队来存储这500个请求可以吗?我担心在等待服务器出现空闲线程时,等待时间过长,链接断开了 各位有什么好的方法来处理这个情况吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
62 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
江东橘子
2011-07-28
打赏
举报
回复
谢谢各位大侠的回复!!
分数不够,不能都拿到,谅解谅解 huhuu
favan
2011-07-04
打赏
举报
回复
学习一下
a0solo
2011-06-30
打赏
举报
回复
server load balancing
qq120848369
2011-06-30
打赏
举报
回复
瓶颈在于线程个数有限制..
用epoll检测监听套接字与已连接套接字,将新的连接套接字加入到集合里,将已连接套接字的数据到来作为一个task加入到全局队列里,唤醒一个线程去处理.
传统的都是一个客户对应一个线程,始终占有直到客户端断开连接.
现在是一个请求对应一个线程,处理结束便放掉了线程,所以一个线程已经不是在对应一个客户了,而是对应千千万万客户的千千万万个请求.
你应该知道线程里死循环,阻塞在条件变量上的,只有主线程给予通知才能唤醒,一旦唤醒,那么由于死循环检测缘故,如果我们只有1000个线程,而来了8000个请求,主线程不管3721,将8000个请求都加入队列,并且唤醒8000次,而实际唤醒1000次就唤醒了所有线程,而每个线程都是轮训检测的,所以将最终取完并处理所有在全局队列里的请求.
这就是一个线程对应多个客户,线程的工作周期不是和客户生命周期一样,而是随每一次请求而运作的.
ak_kay
2011-06-30
打赏
举报
回复
我也觉得对,使用epoll来做的话,那就是对着的是千千万万个请求的问题,而不是接受连接的问题了。
1:master+worker 处理,主进程负责创建监听 sockfd, 子进程负责epoll处理各个事件发生,检测到各个事件是读写事件或accept 进入不同队列。
2:各个进程对于处理accept事件接入时,使用锁来防止发生群惊,这样也会使得各个进程负载均匀。
3:各个子进程里面维护的是各自其accept上来的 sockfd, 那么这就会,即使其中一个子进程退出了,也不至于全部client退出,并且主进程可以通过信号来检测得到哪个子进程非正常退出了,然后重新建立进程。
看你业务需要,不是文件大信息类型的服务器,应该不用一条线程一个用户也处理的过来吧?
树先生
2011-06-29
打赏
举报
回复
线程池+epoll
可开50个线程 每个线程使用epoll管理30个socket
wany2032
2011-06-29
打赏
举报
回复
这个肯个人觉得一般的程序超过30个线程 那就是不可以接受的 linux 下epoll不错,另外使用一下AIO
nut_free
2011-06-28
打赏
举报
回复
学习ing
li304464743
2011-06-28
打赏
举报
回复
同问啊啊啊啊!!!!
aXen
2011-06-28
打赏
举报
回复
建立线程池,线程处理完任务后,由线程池回收,交给下一个任务。
luketty
2011-06-28
打赏
举报
回复
不能每个连接单开个线程啊,这样服务器会死的很惨
如上面说的,用高并发的网络模型
linux上 epoll
win上 iocp
性能都很不错
一只牛_007
2011-06-28
打赏
举报
回复
用ACE的Reactor,单线程多客户端。
一只牛_007
2011-06-28
打赏
举报
回复
[Quote=引用 5 楼 delphiwcdj 的回复:]
对于那种有大量连接的可以考虑采用epoll模型
[/Quote]
今天腾讯面试,提到了,我说我没用过,哎。
极地_雪狼
2011-06-28
打赏
举报
回复
应该是考虑客户端怎么处理吧?
君望永远
2011-06-28
打赏
举报
回复
返回客户端排队~ 再心跳
hotspring110
2011-06-28
打赏
举报
回复
可以用listen 建立一个队列,队列大小最小>1500,有连接请求是就会建立连接,在系统内核当中他会把所需要连接的请求分为2部分,一部分为已连接队列,另一部分就是未连接队列,当已连接队列为空时就会阻塞,在未连接队列中的队头就会建立TCP 3次握手连接,加入到已连接队列中。随后进行处理,所以没必要担心现成会在空闲的时等待时间过长断开连接。希望这些对你有帮助
zz4180645
2011-06-28
打赏
举报
回复
我也来学习
美DE美
2011-06-28
打赏
举报
回复
我来学习学习!
高山
2011-06-27
打赏
举报
回复
[Quote=引用 38 楼 xiayadong 的回复:]
牛B!
开1000个线程,光是线程之间的切换就要很大一部分资源!
网络模型压根就选错了!
采用WSAEventSelect或IOCP模型
[/Quote]
+
xiayadong
2011-06-27
打赏
举报
回复
牛B!
开1000个线程,光是线程之间的切换就要很大一部分资源!
网络模型压根就选错了!
采用WSAEventSelect或IOCP模型
加载更多回复(39)
Triton推理
服务器
部署YOLOv8实战
Triton Inference Server(Triton 推理
服务器
)是一个高性能、灵活、可扩展的推理
服务器
,支持多种机器学习框架(PyTorch、ONNX等)和部署场景。本课程讲述如何在Triton Inference Server(推理
服务器
)上部署YOLOv8目标检测的推理服务。 课程完整演示了在Ubuntu操作系统上使用Triton推理
服务器
的ONNX Runtime后端和TensorRT后端部署YOLOv8目标检测模型。部署流程涵盖了以下关键步骤: 安装Docker、安装Nvidia Container Toolkit、导出ONNX模型、构建TensorRT引擎、组织模型仓库布局文件、构建Triton推理Docker容器、运行和测试Triton推理
服务器
。
企业微信消息推送(一)接收消息
服务器
URL
企业微信限制
过多
,公司域名所有权检验不通过。采用接收消息
服务器
URL的方式。使用vscode,将UTF-8 BOM文本编码改为UTF-8。配置接收消息
服务器
URL。
微信小程序(一):微信小程序与
服务器
的简单
链接
生活无趣且不易,一起找点乐子吧。欢迎评论,和文章无关的东西也没关系。 关于小程序的有些问题,我搜索不到太有价值的东西(可能是我对关键字的理解不好)。 在这里我总结下遇到各种问题,可能看来会比较可笑,但对新手来说也许会有些帮助,我会尽量去注重具体的实现。 这篇文章来说下小程序和
服务器
的
链接
问题,或许有些人会和我一样。二者要
链接
,知道小程序要向
服务器
发送带参或不带参请求,然后服...
TCP SYNC_RECV 状态连接数
过多
如何
处理
TCP SYNC_RECV 状态连接数
过多
如何
处理
常见HTTP响应状态码
响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值 常见状态码: 100~199:表示
服务器
成功接收部分请求,要求客户端继续提交其余请求才能完成整个
处理
过程。 200~299:表示
服务器
成功接收请求并已完成整个
处理
过程。常用200(OK 请求成功)。 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。 400~499:客户端的请求有错误,常用404(.
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章