自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

扎扎实实写代码的专栏

勤勤恳恳打基础,扎扎实实写代码。勿忘初衷。。。。

  • 博客(10)
  • 收藏
  • 关注

原创 muduo源码分析--线程池的实现

muduo线程池主要有3个类的实现:EventLoop,EventLoopThreadPool,EventLoopThread,和Thread. 1.Thread为对一个线程的封装:class Thread : boost::noncopyable{ public: typedef boost::function<void ()> ThreadFunc; //创建线程时,传递的函数

2017-04-25 10:39:43 803

原创 linux多线程编程关键字:__thread,__bulitin_expect

最近读代码的时候,看到有__thread这个东西,查了一下资料。表示为每个线程声明这样一个变量,并且线程与线程之间的这个变量毫无关联。__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。 __thread使用规则:只能修饰PO

2017-04-18 15:53:38 746

原创 linux-muduo线程通信eventfd

eventfd 在内核版本,2.6.22以后有效。查看内核版本可以用命令 uname -r 在看muduo源码时,项目中使用eventfd机制实现线程间的唤醒(通知)。觉得效率比较高,所以拿来学习下。其也可以实现父子进程间的通信。 首先使用: man eventfd name:eventfd–创建一个用于事件通知的描述符SYNOPSIS:#include<sys/eventfd.h> in

2017-04-17 20:47:30 1540

原创 muduo-源码分析2:注册监听socket和建立连接

阅读库源码时可以从库的接口层着手,看看关键功能是如何实现的。对于muduo而言,可以从TcpServer/TcpClient/EventLoop/TcpConnection这几个类着手。 首先理解muduo如何注册监听socket建立连接,其函数调用时序图如图:

2017-04-11 17:18:01 400

原创 muduo源码分析2:整体框架

muduo简化类图: Channel 是selectable IO channel,负责注册与响应IO 事件,注意它不拥有file descriptor。它是Acceptor、Connector、EventLoop、TimerQueue、TcpConnection 的成员,生命期由后者控制。 Socket 是一个RAII handle,封装一个file descriptor,并在析构

2017-04-11 16:16:37 557

原创 muduo-源码分析 1:基础概念准备

一 网络模型-Reactor模式 1.什么是reator模式 Wikipedia上说:“The reactor design pattern is an event handling pattern for handling service requests delivered concurrently by one or more inputs. The service handler

2017-04-11 16:04:44 750

原创 muduo-源码分析(前言0)

前言0 个人高性能、高并发linux服务器端编程(网络编程)比较感兴趣,自己写过一些简单的tcp通信程序,用进程池实现简单CGI服务器,用线程池实现简单web服务器。熟悉c++编程语言,但是没有用c++参与过一个项目,所以想寻找一个开源项目,用c++自己实现一个相对完整的网络库,所以选择了muduo开源网络库作为学习的第一个系统。因为他的代码量比较小,书中提到了如何借助现成库来发挥C++的

2017-04-11 15:41:15 442

原创 c++--Singleton单例模式的实现

1.线程安全的懒汉单例模式 懒汉式的特点是延迟加载,比如配置文件,采用懒汉式的方法,顾名思义,懒汉么,很懒的,配置文件的实例直到用到的时候才会加载。。。。。。class Singleton{public: static Singleton& GetInstance(void) { if(m_instance == nullptr) //双重check,实现多线程

2017-04-05 16:25:43 1086

原创 c++--静态成员变量

1.引言 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响。例如有两个相同类型的对象 a、b,它们都有一个成员变量 m_name,那么修改 a.m_name 的值不会影响 b.m_name 的值。 可是有时候我们希望在多个对象之间共享数据,对象 a 改变了某份数据后对象 b 可以检测到。共享数据的典型使用场景是计数,以Studen

2017-04-05 10:51:46 377

原创 c++-静态成员函数和非静态成员函数的区别

1.virtual与静态函数 C++中,静态成员函数不能被声明为virtual函数。 例如,下面的程序会编译失败。#include<iostream> class Test { public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { } }; 同样地,静态

2017-04-05 10:28:07 8691

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除