请教一个如何提高程序执行效率的问题?谢谢~

rabbit729 2008-06-16 09:38:56
问题是这样的:
客户端和服务器端使用Socket通信(阻塞模式),服务器端接收客户端请求(有些请求客户端需要向服务器传送较大文件,比如1.3M),服务器端接收请求后并对数据进行处理后,将处理结果返回给客户端(应答消息长度固定12字节).
现在的问题是:客户端和服务器端传输数据的速率大约为65M/s(千兆网),服务器端处理数据的速度为60M/s.如果采用阻塞式通信时,从客户端发出请求到接到应答的速度可能只有30M/s(减半).

我的问题就是如何能够提高这个速度,也就是客户端发出数据到接受到应答的消息间的时间?

我现在想到如下两种方法:
1.仍然采用阻塞式通信,不过在服务器端采用多线程实现,其中一个线程接收数据,一个线程处理数据,服务器中开辟两个缓存来存放接收的数据,接受数据的线程和处理数据线程对这两个缓存进行轮换使用

2.采用非阻塞的异步通信模式,不过我认为这个方法可能对速度提高的不是很大

上面只是个人的看法,还请各位帮忙看看,也可以发表自己的观点!!!!
...全文
131 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbit729 2008-06-17
  • 打赏
  • 举报
回复
谢谢各位的回复,希望有经验的高手给点拨一下,免得小弟走弯路,谢谢!
intel_zhenyuwang 2008-06-17
  • 打赏
  • 举报
回复
如果是双工的,则需要处理发送,接受,再加上数据处理。三个线程。

服务器端和客户端内存区含所有的消息块(处理的和未处理的),收容量的限制,需要设定预警(Buffer Overflow).

为性能考虑,采用同步通信,但到达预警状态时,可以用信号干扰-延时处理和发送(把内存信息写盘)
aniuman 2008-06-17
  • 打赏
  • 举报
回复
设置缓冲区,当接受到的数据大于缓冲区大小时阻塞,否则不阻塞。
taodm 2008-06-17
  • 打赏
  • 举报
回复
你为什么不把各种方法都实现出来,然后实测呢?
这种问题,只有实测最具说服力。
rabbit729 2008-06-17
  • 打赏
  • 举报
回复
自己顶一下!大家都帮忙看一下,顶者有分!
rabbit729 2008-06-16
  • 打赏
  • 举报
回复
to:evifree
谢谢楼上的回复,是只有一个客户端,能不能详细说一下单客户端情况下为什么多线程没有意义?谢谢~!
也谢谢一楼的回复
evifree 2008-06-16
  • 打赏
  • 举报
回复
假如是单客户端, 服务器端多线程就没有意义
多客户端的情况下, 需要根据每个任务处理的时间长短来选择是否使用多线程, 如果处理时间较长, 为了避免对客户端的响应时间过长, 可以采用第1种方式
K行天下 2008-06-16
  • 打赏
  • 举报
回复
可以尝试第一种,服务器的处理能力应该比较强

65,186

社区成员

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

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