socket服务的模型以及实现(7)–总结

    首先,我们来熟悉一下基本知识,再回顾前几篇文章!

   1:阻塞/非阻塞–这两个概念是针对 IO 过程中进程的状态来说的

        阻塞 IO 是指调用结果返回之前,当前线程会被挂起
        非阻塞指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回

   2:同步/异步–这两个概念是针对调用返回结果来说的

        同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回
        当一个异步过程调用发出后,调用者不能立刻得到结果,实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者

   3:多路复用(IO/Multiplexing)

        为了提高数据信息在网络通信线路中传输的效率,在一条物理通信线路上建立多条逻辑通信信道,同时传输若干路信号的技术就叫做多路复用技术。
        对于 Socket 来说,应该说能同时处理多个连接的模型都应该被称为多路复用,目前比较常用的有 select/poll/epoll/kqueue 这些 IO 模型.

    4:惊群效应

        惊群问题是由于系统中有多个进程在等待同一个资源,当资源可用的时候,系统会唤醒所有或部分处于休眠状态的进程去争抢资源,但是最终只会有一个进程能够成功的响应请求并获得资源,但在这个过程中由于系统要对全部的进程唤醒,导致了需要对这些进程进行不必要的切换,从而会产生系统资源的浪费.

        更多资料可参考如下链接

        http://wenda.workerman.net/?/question/179

        https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/

    我们接着回顾下前几篇文章的思绪

        socket服务的模型以及实现(1)–单进程阻塞模型

           单进程阻塞模型,一次只能处理一个连接,效率极低!

        socket服务的模型以及实现(2)–多进程阻塞模型

            多进程阻塞模型,一个进程处理一个连接!

        socket服务的模型以及实现(3)–单进程IO复用select

           单进程IO复用(select),同时处理的连接数不受限于进程数!

        socket服务的模型以及实现(4)–单进程IO复用libevent

           单进程IO复用(libevent),同时处理的连接数比select要好很多!

        socket服务的模型以及实现(5)–多进程IO复用libevent

           多进程IO复用(libevent),可以更好的利用多核!

        socket服务的模型以及实现(6)–多进程IO复用libevent–端口复用技术

          增加了端口复用技术,性能更好!

     通过几上几篇文章,对于我们用PHP写个socket服务有了基本的服务模型认识!

   

此条目发表在 好文推荐, 网站开发, 网站架构 分类目录,贴了 标签。将固定链接加入收藏夹。

评论功能已关闭。