能接触这本书是因为上一个项目是用c++开发基于Linux的消息服务器,公司没有使用第三方的网络库,卷起袖子就开撸了。个人因为从业经验较短,主 要负责的是业务方面的编码。本着兴趣自己找了这本书。拿到书就简单的翻了下,看到是基于c++11标准的,用到了智能指针、bind/function等 工具。因为对c++11不是很了解再加上表较忙就搁置下来了。现在借着项目的空档期,拜读了陈硕的这本关于服务端多线程开发的书,选取了一些自己比较感兴趣的章节,有些进行了比较深度的阅读,如对象生命期的管理和线程同步、有些则是粗略的浏览了一遍。

  个人觉得读一些书,需要真正的静下心来,这样的效率才能有保证。想获取知识浮躁的心态是要不得的,而且在读书当中应该对重点进行特殊对待。其他的则可以略读或干脆不读。总之一个原则:将精力主要集中在重点知识上去。

  如何在读书的时候把心静下来,暂时还不得要领!需要继续观察总结。在没有更好的方法前只能是先去读书,在读书的过程中达到心静的状态。

1. 多线程编程

  个人认为c++多线程的难点与重点就在

  (1) 共享资源的安全使用

    对象在构造期的线程安全:

      线程A: 在构造期这时如果将对象a注册到另外一个对象b中。 在此时另外一个线程B:对象吧调用方法使用到线程A中注册的对象,这个时候是不能保证对象的完整性的。就算将注册函数的调用放在构造函数的结尾处,还要考虑到这个类是否被继承,如果被继承得到的对象将是不完整的(派生类的对象还没有构造出来)。

      解决方法:将对象的注册放到初始化函数中。不在构造期将对象暴露出去。

    对象在使用中的线程安全:

    要想安全的使用共享资源,就需要用到线程同步的知识。

    线程同步方法:互斥量、条件变量、信号量、读写锁

    书中推荐使用互斥量和条件变量就基本可以解决所有遇到的同步问题,个人也很认同。也就把精力放在了互斥量和条件变量的学习上了。

    对象在析构时的线程安全:
            保证在对象析构时的线程安全是比较麻烦的时,因为在c++中我们没有方法判断对象是否是有效的。通过对对象加锁达不到多线程的安全性,因为在析构的时候对象多持有的锁在析构时就结束了它的生命期。
            书中给出的办法是通过智能指针,当指针的引用计数小于0时对象被析构。
            使用智能指针时需要避开智能指针的一些坑例如循环引用,智能指针不是多线程安全的使用时需要加锁。

  (2) 性能
        这个方面了解的比较少,现在知道的是:
        1) 控制锁的粒度  
        2)线程调度,控制线程的数量,在程序运行中不频繁的创建、销毁线程,安排好线程的职责:专门负责I/O的线程、专门负责计算的线程、第三方库的线程
    
2. 值语义与数据抽象,几个概念
    值语义指的是对象的拷贝与原对象无关,拷贝后与原对象脱离关系。
    与值语义对应的是对象语义或叫引用语义。指的是面向对象意义下的对象,对象拷贝是禁止的。
    数据抽象,用来描述(抽象)数据结构的。
    
    数据抽象、面向对象、基于对象的区别
        面向对象有3大特征:封装、继承、多态。
        而基于对象则只有封装没有继承和多态,即只有具体类没有抽象借口。它们都是对象语义。
        数据抽象是针对“数据“的,这意味着ADT(抽象数据类型)class应该可以拷贝。它是值语义。
    面向对象真正核心思想是消息传递,”封装继承多态“只是表象。具体参考 http://blog.csdn.net/myan/article/details/5928531    function/bind的救赎(上) 作者: 孟岩

参考文章:
    【1】《Linux多线程服务端编程:使用c++muduo网络库》 作者:陈硕

Linux多线程服务端编程一些总结的更多相关文章

  1. 《Linux 多线程服务端编程:使用 muduo C++ 网络库》电子版上市

    <Linux 多线程服务端编程:使用 muduo C++ 网络库> 电子版已在京东和亚马逊上市销售. 京东购买地址:http://e.jd.com/30149978.html 亚马逊Kin ...

  2. 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册

    <Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...

  3. 《Linux多线程服务端编程》笔记——多线程服务器的适用场合

    如果要在一台多核机器上提供一种服务或执行一个任务,可用的模式有 运行一个单线程的进程 运行一个多线程的进程 运行多个单线程的进程 运行多个多线程的进程 这些模式之间的比较已经是老生常谈,简单地总结 模 ...

  4. 《Linux多线程服务端编程》笔记——线程同步精要

    并发编程基本模型 message passing和shared memory. 线程同步的四项原则 尽量最低限度地共享对象,减少需要同步的场合.如果确实需要,优先考虑共享 immutable 对象. ...

  5. 一、智能指针及线程同步总结------linux多线程服务端编程

    更新2.0 二.多线程及服务器编程总结------linux多线程服务端编程 https://www.cnblogs.com/l2017/p/11335609.html 三.分布式编程总结------ ...

  6. Linux多线程服务端编程:使用muduo C++网络库

    内容推荐本 书主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread.这 ...

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

    第一章 线程安全的对象生命期管理 第二章 线程同步精要 第三章 多线程服务器的适用场合与常用编程模型 第四章 C++多线程系统编程精要 1.(P84)11个常用的最基本Pthreads函数: 2个:线 ...

  8. <Linux多线程服务端编程>学习记录

    使用智能指针解决多线程下 类的解析冲突问题 有这样一个场景 使用StockFactory记录Stock的信息  容器是map<string,smart_ptr>; 代码如下: #inclu ...

  9. Linux多线程服务端编程 使用muduo C++网络库 学习笔记 日志log

    代码来自陈硕开源代码库 muduo中 地址是https://github.com/chenshuo/muduo #pragma once #include <string> #define ...

随机推荐

  1. Javascript数组函数库

    其实平时用的比较多的应该是push和pop,不过还是都记下来,以便后面使用. shift :删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4 ...

  2. 策略模式(strategy pattern)

    策略模式在java集合中的TreeSet和TreeMap中得到了很好的应用,我们可以实现Comparator接口实现Compareto()方法来定义自己的排序规则,然后通过TreeSet,TreeMa ...

  3. linux 命令总结

    ①用find命令查找并删除文件 用脚本创建测试数据: [root@greymouster ceshidata]# for n in `seq 10`> do > date -s " ...

  4. Nodejs学习(二)-express生成器

    1.安装生成器 sudo npm install express-generator -g 2.做ln链接,这个我就不介绍了,可以参照上个随笔,指向/usr/local/bin就行. 3.生成项目文件 ...

  5. C# Datatable group by 查询

    操作Datatable  group by  查询 //获取统计图形数据 var dicleft = new Dictionary<string, DataTable>(); ].AsEn ...

  6. 以练代学之shell入门(一)

    5年前的时候,开始接触linux操作系统,接触的第一步就是学习shell脚本.用小脚本以连代学入了门. 1) 9*9乘法输出 2) 检验主机的服务是否启动 3) 冒泡排序 4) 备份当时team服务器 ...

  7. SQL Server 数据库的安全管理(登录、角色、权限)

    ---数据库的安全管理 --登录:SQL Server数据库服务器登录的身份验证模式:1)Windows身份验证.2)Windows和SQL Server混合验证 --角色:分类:1)服务器角色.服务 ...

  8. python3.5------day4--function

    函数 函数的作用: 1.减少重复代码 2.扩展性强 3.使程序变的可维护 函数的定义: def test(): print("I'm yao") #def 是固定的,test为函数 ...

  9. 新建一个UI窗口-XproerUI(MFC)教程

    版权所有 2009-2015 荆门泽优软件有限公司 保留所有权利 产品首页:http://www.ncmem.com/apps/xproerui/index.asp 在线文档(XproerUI):Xp ...

  10. css 隐藏超长的文本!!!

    overflow:hidden; text-overflow:ellipsis;white-space: nowrap; 一起使用!