当前位置:  技术问答>linux和unix

如何提高性能

    来源: 互联网  发布时间:2017-01-18

    本文导语:  请问各位,如果有这个过程: 链表中有500万到1000万个key。 客户端从内存链表中顺序取得key—>向服务器发送key(同时删除该key)—>服务器返回对应数据—>客户端保存到磁盘中。 如何能大幅提高速度呢?(仅从客户...

请问各位,如果有这个过程:
链表中有500万到1000万个key。
客户端从内存链表中顺序取得key—>向服务器发送key(同时删除该key)—>服务器返回对应数据—>客户端保存到磁盘中。
如何能大幅提高速度呢?(仅从客户端这边考虑)。

我现在是使用单线程,10个小时都完成不了。

|


什么叫逐个读啊,不就是发请求,读应答么,那你们用epoll的目的是什么。

我有1000个key,我TCP顺序发出去, 另一端顺序处理key,顺序返回value, 我这一边顺序存储value, 这和多线程没什么关系。

写磁盘比较慢的话,可以做内存映射直接操作内存。

如果做成多线程,问题那就大了,客户端根本没有道理做多线程,apache做成线程的worker模式那是可以的,因为它是服务器,它处理的是不同用户的请求。 你是客户端,你打算让哪个线程发送key? 你打算通过N个socket连到服务器? 每个socket负责1000/N个key的写? 那并发写磁盘你能处理好么? 你打算1个socket连到服务器? 那多线程读一个socket还要加锁? 

网络I/O现在根本不是瓶颈,一个单线程epoll loop 每秒10/100M流量小意思, 完全看交换机给你提供多少带宽。 

多线程模型在现在看来都是垃圾架构,除非特殊应用场景。

楼主面临的问题是写磁盘的压力,因为磁盘I/O慢直接影响到网络I/O速度, 方法就是内存映射。

如果还嫌慢, 这时候多线程的优势就出现了, 把磁盘I/O迁移到一个单独的线程/子进程里, 主线程的网络数据通过管道送给磁盘I/O线程/进程,让它并发的去写,而不是让网络I/O等待磁盘写。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎么提高主页显示的速度
  • 请推荐几本java的入门和提高书籍.
  • 请教如何提高SD卡的读写速度?
  • 请问在编写Java小应用程序的时候,有些功能用JavaScript实现是否可以提高效率呢?
  • JAVA提高~
  • 《jsp入门与提高》,
  • 怎么才能提高一个进程能打开的描述符数量
  • 提高cpu使用率
  • 怎样提高读取文件的速度?
  • 哪位结合原码说明下Linux内核开发人员是如何处心积虑的提高效率的
  • 急求redhat liunx8.0电子文档。(安装指南和入门指南和提高或相关的电子文档)
  • 只有256内存,如何让fc8响应速度提高?
  • **关于大数据量如何提高效率。
  • 十万火急!(100分) unix下如何提高Coll(网络发生碰撞的次数)
  • 如果要研究源代码以提高自己,哪一个开放源代码的软件比较合适?
  • 请各位帮忙:描述一些项目(要能提高编程水平,java水平)
  • @@@@@@@ 提两个80386保护编程方面的问题,为提高本版的贴子量尽点力 @@@@@@@@@@@
  • 如何提高LINUX4网卡的速度?
  • Linux下提高数据库操作速度
  • Xwindow的刷新频率能提高吗——mm提


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3