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

关于IO多路复用使用?

    来源: 互联网  发布时间:2017-05-24

    本文导语:     在网上看到linux IO多路复用(如select、epoll)使用例子,都是采用在单线程中监听,然后处理。我有两个问题不明白:   1.大部分实现都是通过超时的方式,在同一个线程中处理accept和recv,能否在两个线程中分别处理a...

   在网上看到linux IO多路复用(如select、epoll)使用例子,都是采用在单线程中监听,然后处理。我有两个问题不明白:
  1.大部分实现都是通过超时的方式,在同一个线程中处理accept和recv,能否在两个线程中分别处理accept和select,且select一直阻塞?
  2.如果客户端数量很多,采用单线程epoll_wait然后recv,感觉效率很低,能否根据机器cpu数量动态创建一定线程处理?如果能多线程处理,我考虑了2种方式,a.多个线程wait同一个epoll描述符,即每个线程执行相同线程函数(同一个事件会被多个线程捕捉吗?);b,每个线程创建一个epoll描述符,将客户端socket放在这些epoll中。这两种方式,那种是对的呢?又或者在处理大规模连接时,正确的处理方式是?

|
   单线程处理 一般的网络连接量足以,一般只在数据进来后处理上耗时;
    可以一个线程select,一个accept,但单单两个线程其实和 单线程工作是一样的的,accept要等select分发,而select后续的连接建立还是要等accpet处理,其实还是顺序执行;
  一般是 一个主线程 select/poll/epoll, 分发到线程池 (或另起一线程),实现连接触发(select等)和accept(及后续数据处理)的并发
   可以参考下libevent的事件处理
 因为一个端口只能被一个进程listen,再大的话只能 做负载均衡,映射什么的~~
 

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












  • 相关文章推荐
  • JMF中如何实现多路音频的混合输出?期待高手指教!
  • 多路播放器的问题,问题解决了补加100分,请各位大哥指教
  • 用select做多路复用时,臬知道是哪一个描述符可读?
  • 多路I/O中select机制的问题


  • 站内导航:


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

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

    浙ICP备11055608号-3