在实际工作中,90%的C++程序运行在Linux平台,离开了Linux操作系统,谈并发没什么意义。
如果用现代C++的思路开发服务程序,首选C++11标准的线程。但是,线程也不是万能的,在某些场景中,进程可能比线程更合适。有一个高频面试题:进程和线程有什么区别?如果答不出来,估计下面没有了。
本章介绍网络高并发的基石-I/O多路复用,从select、poll到epoll,所有的高并发项目,如redis、memcache、nginx,都是基于epoll。
从本章开始,我将手把手的带大家从0实现百万并发的Reactor服务器。注意,我们的目标是自己写一个高性能的、可扩展的网络库(类似muduo,而不是使用其它的第三方库,如libevent),在这个网络库之上,可以开发出像QQ和微信等亿级用户的应用。使用第三方库(如libevent)来做应用开发不难,而自己写一个网络库绝非易事。
在传统编程思想中,服务程序一般为顺序结构。Reacor模式是一种事件驱动机制,他逆转了事件处理的流程,不再是主动的等待事件就绪,而是它提前注册好的回调函数,当有对应事件发生时就调用回调函数,以实现不同的功能。
单线程的Reactor模型不能发挥多核CPU的效率,本章介绍使用线程池技术,实现多线程的Reactor服务器,Reactor服务器最完美的解决方案是:1)主Reactor只负责接收客户端的连接,并把客户端连接分配给从Reactor;2)从Reactor接收到客户端的请求报文后,交给工作线程,由工作线程对业务进行处理;3)工作线程处理完业务后,生成回应报文,交给从Reactor,从Reactor再把回应报文发送给客户端。
本章将优化Reactor服务器的各种细节:1)使用智能指针管理资源;2)异步唤醒事件循环;3)定时清理不活跃的清理空闲的TCP连接。
本章将把Reactor服务程序在正式的PC服务器上进行测试,充分压榨服务器的硬件(CPU和内存),实现每秒百万并发的目标。
选课、学习遇到问题?
扫码添加指导老师 1V1 帮助你!
添加后老师会第一时间解决你的问题