select是否能够实现并发编程?

qq_Silence-0°C I/O 模型之 I/O 复用 最后由 CodeHarvester 于2016年05月28日回复

  • 2 回答
  • 1k 浏览

老师,我特别有个疑问,select在单线程的情况下,编写服务端程序,如果多个客户端连接服务端,是不是服务端只能一个一个应答客户端???而不是像多线程那样同时服务?(仅仅就是简单的问题,不考虑开销,不考虑性能,就是解开心里的疑惑:select能不能并发编程?还是我对并发编程理解的不对?)

  • 极客学院_吕布 2016年04月13日 回答 #1楼
  • select是循环遍历socket列表,当某个socekt有信号的时候,就会处理它,但并不会影响它继续遍历列表。多线程你也是用循环accept,内部也会维护一个队列来相应客户端的访问。只不过处理的时候是有多线程同时处理

  • 0 评论
  • CodeHarvester 2016年05月28日 回答 #2楼
  • 既然select是单线程,那么就需要把监听套接字和接收数据套接字都在select管控的描述符集合中,接收的时候当然只能一个一个接收了。可以理解并发编程,能不能并发编程和本身函数无关,和自己的逻辑框架设计有关,比如你有多个线程(或者多个进程),一个线程专门负责接收新的连接,另外的线程负责数据的接收和发送,这不就是并发么,假如多个线程,每个线程既可以接收新的连接又可以处理连接上的数据,这同样也是并发编程。并发编程是设计问题,不可认为这个函数何以不可以,希望能够帮助你!

  • 0 评论