文章 12
评论 4
浏览 20910
C++高性能服务端编程——muduo网络库源码阅读(四)TcpConnection类

C++高性能服务端编程——muduo网络库源码阅读(四)TcpConnection类

概述 前面几篇文章讲了muduo的事件驱动循环模型以及相关的实现与优化,它们是muduo网络库实现高并发和高吞吐量的基础,但这都没有涉及到网络编程相关的内容,这篇文章开始我们从muduo的TcpConnection类入手,探讨muduo网络部分的实现。 网络编程中的高性能IO实现探讨 在分析TcpConnection类的源码前,我们先来简单探讨下网络编程中如何最大化CPU资源的利用率,保证高并发场景下的吞吐率。在Linux系统中,用户对某个文件进行的IO操作是分两个阶段的,以读数据为例,用户程序调用read系统调用时,系统的行为包括:(1)等待数据准备好,数据会被拷贝到内核的缓冲区中。(2)数据准备完毕后,内核会将数据从内核缓冲区拷贝到用户空间。这个过程涉及到同步异步、阻塞非阻塞的概念 同步和非同步:所谓同步IO是指当用户进程触发IO操作时会原地等待或轮询查看数据是否就绪,一旦就绪则对数据进行内核空间和用户空间之间的拷贝,用户进程同样需要等待这个过程完成,而异步IO则是进程触发IO操作后就去做其他事情,由内核完成整个IO操作并通知进程。换句话说,同步IO是一种顺序操作,用户进程需要等....

C++高性能服务端编程——muduo网络库源码阅读(三)多线程模型

C++高性能服务端编程——muduo网络库源码阅读(三)多线程模型

概述 前面两篇文章简要分析了muduo中文件描述符的管理以及事件的注册和响应机制,通过这两篇文章的介绍可以大致勾勒出一个基本的事件循环模型,利用muduo编写的网络程序都基于这一模型驱动。当然,高性能网络库必然少不了对多线程的支持,本文就来探讨一下muduo中的多线程模型。 One loop per thread模型 关于并发网络服务程序的设计方案有多种,并且绝大部分都有它们的应用场景,《muduo》书中有一节专门介绍了常见的11种并发网络程序设计方案,并且比较了这几种方案的特点和优劣。muduo使用的多线程模型是“one loop per thread”,关于这种模式的特点,这里摘抄一段陈硕博客中的介绍 此种模型下,程序里的每个 IO 线程有一个 event loop (或者叫 Reactor),用于处理读写和定时事件(无论周期性的还是单次的),代码框架跟第 2 节一样。 这种方式的好处是: 线程数目基本固定,可以在程序启动的时候设置,不会频繁创建与销毁。 可以很方便地在线程间调配负载。 event loop 代表了线程的主循环,需要让哪个线程干活,就把 timer 或 IO ....

深秋的一些碎碎念

深秋的一些碎碎念

生活的色彩,总是少不了秋日里那澄澈的天空,温暖的阳光和火红的枫叶。

Everything that kills me makes me feel alive