阅读本文你将收获:
- 知道框架高性能的根本原因
- 了解进程,线程切换开销在哪里
- 熟悉阻塞与非阻塞IO,同步与异步调用的区别
- 讨论一个高性能框架甚至语言的时候,我们在讨论什么?
- 三大网络模型阻塞IO+多进程阻塞IO+多线程非阻塞IO+IO多路复用
- 五种网络IO简介
- 网络IO的本质
- 如何区分阻塞IO和非阻塞IO
- 如何区分同步和异步
- 个人整理的网络IO思维导图
大家在选择一门语言或者一个框架的时候肯定优先看它的性能,也就是并发量,例如常用的测试手段,就是用该语言或者框架写个http server服务器,对于http请求返回一个“hello,world!”,利用wrk进行压测,看看每分钟请求量最高能到多少,在4核8G的Ubuntu服务器上跑该http服务,利用wrk压测,gin框架每分钟能处理的请求量接近300W!这是相当优秀的!
前一阵子在go meet up深圳讨论语言性能的时候,有位老哥说同等业务与机器,php每秒请求量大概在300多,处理三万并发量的服务程序, go需要一台服务器,而PHP需要一百台 。 我当时非常震惊,为什么语言之间的差别这么大,是什么原因造成这个巨大的差别呢?我问Boss Lee(meet up讲师,一位技术大佬),他跟我说因为PHP是一个请求开一个进程处理,注意是进程而不是线程!
那为什么用进程处理请求会造成性能差别这么大,甚至到了一百台服务器的差别呢?(一百台服务器一年得上百万吧~)
经过我查阅资料,得出了是 网络IO模型造成了性能根本上的差别 这一结论!
这里直接说结论:PHP是阻塞IO+多进程模型,大名鼎鼎的Netty(JAVA)框架是主从reactor+worker threads 模式 。
为什么?因为CPU切换进程或线程所带来的性能损耗是巨大的,主从reactor模式解决了IO分发的高效率问题!
这里先记住结论,后文看解析2.三大网络模型2.1阻塞IO+多进程服务器初始监听在lisnted_fd到接字上,此时一个客户端发起连接请求,连接成功后产生连接套接字,此时父进程fork出一个子进程,子进程拿到连接套接字,并以此与客户端通信 。在这种网络模型下,父进程关心的是监听套接字,子进程关心的是连接套接字 。
文章插图
连接分配第一个客户端.png
文章插图
连接分配第二个客户端.png
这种网络模型编程简单,但是效率不高 。
2.2阻塞IO+多线程进程切换上下文代价是相当高的,有一种类似进程,但是切换开销比进程小的东西,那就是线程 。
为什么说线程切换比进程切换开销要小呢?
因为线程由操作系统内核管理,在同一个进程中,所有的线程共享该进程的整个虚拟地址空间,包括代码、数据、堆、共享库等 。
我们的代码被CPU执行需要一些数据支撑的,这就是所谓的上下文,包括但不限于程序计数器需要告诉CPU代码执行到哪里了,寄存器中存放了一些计算中间值,内从中存放了当前一些变量等 。从一个计算场景切换到另一个计算场景,这些值都需要重新载入,这就是上下文切换 。
2.2非阻塞IO+IO多路复用使用poll和epoll可以设计出基于套接字满足高性能,高并发的事件驱动程序 。
事件驱动模型,叫做 reactor模型,或者Even loop模型 。 是不是很熟悉?这个模型的核心有两点:
- 存在一个无限循环的事件分发线程,叫reactor线程,或者Even loop线程 。这个分发线程背后的技术就是poll与epoll这类的IO多路复用技术 。
- 所有的IO操作都可抽象为事件,每个事件必须有回调函数来处理 。acceptor上有连接建立,已连接套接字的发送缓冲区可以写,通信管道pipe上有数据可以读,这些事件通过事件分发,都能被检测并调用回调函数处理 。
- 单reactor模型 + worker threads该模型是将acceptor上连接建立事件,和已连接套接字的IO事件的分发由一个reactor线程去执行,由工作线程去处理耗时操作,例如数据库读取,文件解析,计算等等 。单reactor模型 + worker threads.png
- 主从reactor模型 + worker threads当所有acceptor的连接建立事件和已连接套接字的IO事件交由一个reactor线程处理,在并发量较高的情况下,这个reactor线程会 忙不过来 ,表现在客户端连接建立成功率偏低 。
推荐阅读
- 小小协议大大用处,网络通信桥梁,如何查看ARP协议并清除ARP表项
- 写给开发人员的Web无障碍标准
- 网络安全技术知识分享
- 路由器要不要开启IPv6?这次网络升级究竟有多大改变
- 茶梅盆景怎么造型好看,宜兴壶古典造型与现代造型
- 秘书|职场故事——谁说职场没有捷径?就看你愿不愿意走?诛心九问
- 生意参谋免费版如何查关键词 在生意参谋中可以通过搜索排行查看以下哪些关键词数据
- 四维彩超看性别
- 服装自制淘宝店好做吗 服装店好不好做
- 从诗书画到烟酒茶,常人天宜饮多少茶