很多人居然以为select/poll/epoll是用来实现后台服务并发的?

     网上资料,很多都是以讹传讹,到处复制粘贴,不可尽信。 我们需要有自己的判断。

  

      来说说后台服务模型:

     1.  迭代服务器

       简单说,就是在while中循环accept, 然后处理。显然, 这种服务是没有并发功能的, 后一个请求必须等前一个请求处理完毕, 才会被处理。

     2.  多线程模型

       简单说, 在while循环中循环accept,  然后开启线程来应对每一个请求, 而非在主线程执行阻塞处理操作, 让后一个请求苦苦等待。此时,服务有了并发处理能力。 (实际中的服务, 肯定不会为每个服务都搞一个线程的)

     3. 多进程模型

       简单说, 就是在父进程中循环accept,  然后开启子进程来应对每一个请求, 而非在主进程执行阻塞处理操作,让后一个请求苦苦等待。此时,服务有了并发处理能力。(实际中的服务, 肯定不会为每个服务都搞一个进程的)

     4. select/poll/epoll

       确实有很多地方说select/poll/epoll并发, 这是多么扯淡啊, 它们不过是多路复用, 而已。 很多网上程序给出的epoll代码实现的服务器, 其实是没有并发能力的, 也仅仅是迭代服务器。

       select/poll/epoll的作用是IO复用, 要实现并发, 还是需要交个其他线程/进程去处理。 业界很多成熟的服务组件, 就是这么玩的, 如nginx.

        所以,再说一次, select/poll/epoll没有并发能力, 仅仅是IO多路复用而已。 

        那么,IO复用, 复用的是什么呢? 复用的是, 同一个线程!!!





猜你喜欢

转载自blog.csdn.net/stpeace/article/details/80951371
今日推荐