• 《Linux多线程服务端编程--使用muduo C++ 网络库》---读书笔记


      Why I read this book  

      这本书是泰哥之前推荐过的,不过好像他也没看过:-),网上的评价也挺高的,看这本书主要有这两个原因:

      1. 之前用C++来写算法比较多,很多特性并没有很好的使用到,希望通过这本书及muduo的源码看看具体工程中这些特性是怎么使用的,然后自己按照muduo源码和书中的介绍自己写个demo。

      2. 之前实习面试的时候,发现自己的网络编程方面的技能点有所欠缺,希望通过这本书补一下这方面的知识。

      What I learn from this book

      这本书不仅仅是说网络编程的,这本书首先是一本关于C++多线程系统编程的书,本书首先介绍了使用C++在多线程环境下编程需要注意的点,首先,关于这点书中提到了:

      1. RAII(资源获取即初始化),这是C++中用来管理资源的一种方式,即通过栈空间上执行对象的构造和析构实现对资源的获取和释放。书中例子也用到了这种方法来实现互斥锁的加锁解锁,条件变量的使用。

      2. 善用shared_ptr实现线程安全的对象释放,但是要注意再多个线程读写同一个shared_ptr对象时,需要加锁。

      其实书中提到的类似内容还有很多,但是我觉得收获大的以及印象深刻的也就这两个。

      接着,该书通过用C++实现一个网络库,来阐述Linux中多线程环境编程的概要。

      单线程服务器的常用编程模型:Reactor模式和Proactor模式(本书并没有详细介绍)。

      Reactor模式,即“non-blocking IO + IO multiplexing",程序的基本结构是一个事件循环(event loop),以事件驱动(event-driven)和事件回调的方式实现业务逻辑。其中 IO multiplexing 指的是IO线程的复用,不是IO的复用,具体的话是用select(2)和poll(2),epoll(4)来监听感兴趣的fd。但是这个编程模型也有一个本质的缺点,它要求回调函数必须是非阻塞的。

      多线程服务器的常用编程模型:non-blocking IO+ one loop per thread模式。

      one loop per thread:每个IO线程有一个event loop(或者叫Reactor)用作IO multiplexing,配合non-blocking IO和定时器用于处理读写和定时事件。

      thread pool用作计算,可以使用生产者消费者队列。

      也就是可以有多个IO线程或单个IO线程,每个IO线程最多有一个event loop,使用线程池作为计算线程,每个计算线程使用blocking queue缓存代办任务。

      本书还特意提到在应用层如何实现Buffer类,因为在non-blocking网络编程中应用层实现并使用buffer是必需的,buffer使IO线程只阻塞于IO multiplexing函数上,如select/poll/epoll_wait,而不阻塞read()或者write()

      细节有很多,但是主要思想就是以上,细节就不在此一一赘述了。

      How I master what I learn from this book

      阅读这本书时,我是先阅读一遍这本书,然后根据第8章一步一步实现一个基于事件的非阻塞TCP网络库。但是觉得自己写的并不好,所以就不贴源码地址了,基本跟muduo给出的demo差不多,通过一步一步实现基本明白并理解了muduo网络库的基本思想。

      因为最近比较忙,即要在实验室干活还要阅读论文,尽快水出一片论文出来,以达到毕业要求:-) 所以就没有更深一步的实践了。等过了这阵子,再重新写一个网络库,然后使用这个网络库做一个爬虫或者mini 的http server吧:-)

  • 相关阅读:
    Java基础——字符编码
    三:简单工厂模式
    二:代理模式(静态代理,动态代理)
    一:设计者模式六大原则和单例模式
    java源码
    JDK8新特性 -- Function接口: apply,andThen,compose
    JDK8新特性:Lambda表达式
    Java同步的三种实现方式
    spring boot注解和启动
    springboot:基础学习一 linux下后台启动springboot项目
  • 原文地址:https://www.cnblogs.com/adnryleon/p/5408108.html
Copyright © 2020-2023  润新知