- 博客(23)
- 资源 (46)
- 收藏
- 关注
原创 skynet如何启动一个lua服务
skynet是如何启动一个lua语言编写的服务的的呢?skynet服务,在skynet框架中,具体是以什么形式存在的呢? 每个skynet进程在启动时,都会启动一个lua层的launcher服务,该服务主要负责skynet运作期间,服务的创建工作。我们在lua层创建一个lua层服务时,通常会调用skynet.newservice函数。带着问题,我们来一起看看skynet的源码。
2018-02-27 11:20:24 1851
转载 muduo库的PollPoller类剖析
转载自:http://blog.csdn.net/freeelinux/article/details/53457060muduo库中唯一使用面向对象的地方就在Poller,它有两个派生类,分别是PollPoller和EPollPoller。可以实现两种I/O多路复用机制。PollerPoller的数据成员有:protected: typedef std::map<int, Chan...
2018-02-14 14:01:45 377
原创 muduo库的EpollPoller剖析
EpollPoller,是muduo库对I/O复用机制epoll的封装,不过默认使用的是EpollPoller。在EventLoop中初始化构造poller_,调用newDefaultPoller(this),构造默认的poller。EventLoop::EventLoop() : looping_(false), //表示还未循环 quit_(false), e...
2018-02-14 11:38:07 473 1
原创 muduo的日志库分析四之AsyncLogging类
用一个背景线程负责收集日志消息并写入日志文件,其它业务线程只管往这个“日志线程”发送日志消息,这称为"异步日志"。在多线程服务程序中,异步日志(也可叫“非阻塞日志”)是必需的。假如在网络IO线程或业务线程中直接写日志,写操作偶尔可能阻塞一会儿,业务中的响应请求可能会超时,或者耽误发送心跳包,在分布式系统中可能造成多米骨牌效应,例如误报死锁引发自动failover等。因此,在其它业务线程中应该彻底避
2018-02-07 11:10:57 1191 2
原创 muduo的日志库分析三之LogFile类
LogFile类图LogFile类主要负责日志的滚动,日志滚动有两种条件,一种是日志文件大小达到预设值,另一种是时间到达超过当天。由几个成员变量来控制日志滚动。// 基本的文件名,日志文件名由基本文件名和时间日期等元素构造 const string basename_; // 日志文件的极限容量,当日志文件的数据量达到这个限制之后就重新生成一个日志文件 cons
2018-02-07 10:44:35 778
原创 muduo的日志库分析二之Logger类
github地址:https://github.com/chenshuo/muduo/blob/master/muduo/base/Logging.hhttps://github.com/chenshuo/muduo/blob/master/muduo/base/Logging.ccLogger类图Logger使用时序图如下:
2018-02-07 10:30:37 675
原创 muduo的日志库分析一之LogStream
muduo日志库是C++ stream风格,这样用起来更自然,不必费心保持格式字符串和参数类型的一致性,可以随用随写,而且是类型安全的。stream风格的另一个好处是当输出的日志级别高于语句的日志级别是,打印日志是个空操作,运行是开销接近零,而printf风格不易做到。muduo没有用到标准库的iostream,而是自己写的LogStream类,这主要是出于性能。设计这个L
2018-02-07 10:18:35 2135
原创 C++ 中线程安全的对象生命期管理概要二
《Linux多线程服务端编程》的1.11节以对象池为例子讲解了shared_ptr技术与陷阱。假设有 Stock 类,代表一只股票的价格。每一只股票有一个惟一的字符串标识,比如 Google 的 key 是 "NASDAQ:GOOG",IBM 是 "NYSE:IBM"。Stock 对象是个主动对象,它能不断获取新价格。为了节省系统资源,同一个程序里边每一只出现的股票只有一个 Stock
2018-02-06 21:09:46 242
原创 C++ 中线程安全的对象生命期管理概要一
在这里,对《Linux多线程服务端编程》的第一章:线程安全的对象生命期管理的概要整理,这章的具体内容见陈硕的博客:http://blog.csdn.net/Solstice/article/details/5238671。如何避免对象析构时可能存在的竞态条件(race condition)是C++多线程编程面临的基本问题,可以借助shared_ptr和weak_ptr智能指针完美解决。
2018-02-06 21:01:48 566
转载 借shared_ptr实现copy-on-write(2)
转载自:http://blog.csdn.net/solstice/article/details/3351751借shared_ptr实现copy-on-write场景:一个多线程的C++程序,24h x 5.5d运行。有几个工作线程ThreadW{0,1,2,3},处理客户发过来的交易请求,另外有一个背景线程ThreadB,不定期更新程序内部的参考数据。这些线程都跟一个
2018-02-05 16:50:00 239
原创 借shared_ptr实现copy-on-write (1)
在《Linux多线程服务端编程使用muduoC++网络库》2.8节说“借shared_ptr实现copy-on-write”。那么copy-on-write是怎样的技术? COW(Copy-On-Write)通过浅拷贝(shallow copy)只复制引用而避免复制值;当的确需要进行写入操作时,首先进行值拷贝,再对拷贝后的值执行写入操作,这样减少了无谓的复制耗时。 特点如下:
2018-02-05 16:45:20 898
原创 C++之不完全类型
在muduo源代码中,会看到这样的代码:typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1]; T_must_be_complete_type dummy; (void) dummy; 在C++中,类型有Complete type和Incomplete type之分,对于Complete type, 它的大小在编译
2018-02-04 18:00:15 518 1
转载 muduo库的ThreadLocal类剖析
转载自:http://blog.csdn.net/freeelinux/article/details/53431275首先来看一个概念:线程特定数据>>>在单线程程序中,我们经常用全局变量共享数据。多线程环境下,全部变量被所有线程所共有。>>>但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效>>>POSIX线程库通过维护一定的数据结构来解决这个问题,这些数
2018-02-04 17:52:51 315
转载 Linux中的线程局部存储(二)
转载自:http://blog.csdn.net/cywosp/article/details/26469435在Linux中还有一种更为高效的线程局部存储方法,就是使用关键字__thread来定义变量。__thread是GCC内置的线程局部存储设施(Thread-Local Storage),它的实现非常高效,与pthread_key_t向比较更为快速,其存储性能可以与全局变量相媲美
2018-02-04 17:00:41 532
转载 Linux中的线程局部存储(一)
转载自:http://blog.csdn.net/cywosp/article/details/26469435在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得到
2018-02-04 16:58:39 724
转载 muduo库的BlockingQueue和BoundBlockingQueue类剖析
转载:http://blog.csdn.net/freeelinux/article/details/53428629一:无界阻塞队列muduo库的BlcokingQueue实际上用的生产这消费者模型。我们知道生产者消费者模型一般有两种实现方式,可以利用信号量也可以利用条件变量实现,muduo库采用条件变量实现。BlockingQueue比较简单,它是线
2018-02-04 15:12:48 296
原创 用C++实现单例模式4——C++11实现
1.static local Scott Meyer在《Effective C++》中提出了一种简洁的singleton写法。templateclass Singleton{public:static T& getInstance(){ static T value; return value;}private: Singleton()
2018-02-04 11:04:28 2758
原创 用C++实现单例模式3——如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton
如题所示,在这里主要讲的是,如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton。有四种方式来实现: 1.Atomic Singleton 2.UNIX平台下的pthread_once 3.static object 4.local static需要区
2018-02-04 10:56:11 1095
原创 用C++实现单例模式2——线程安全
上篇文章提及到单例的懒汉模式是线程不安全的,会产生race condition从而产生多次初始化的情况。要想在多线程下工作,最容易想到的就是用锁来保护共享变量了。下面是伪代码:templateclass Singleton{public:static T& getInstance(){{ MutexGuard guard(mutex_) // RAII if (
2018-02-04 10:42:06 266
原创 用C++实现单例模式1——懒汉模式和饿汉式
单例模式的定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 那么我们就必须保证: 1.该类不能被复制。 2.该类不能被公开的创造。 那么对于C++来说,它的构造函数,拷贝构造函数和赋值函数都不能被公开调用。应用场景: 比
2018-02-04 10:08:29 8616 4
原创 Linux线程同步——条件变量
一. 概述 条件变量(condition variable)是利用共享的变量进行线程之间同步的一种机制。典型的场景包括生产者-消费者模型,线程池实现等。 与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 条件变量使我们可以睡眠等待某种条件出现。条件变量是
2018-02-04 09:29:56 1153
原创 muduo库源码阅读之MutexLock、MutexLockGuard、Contidion、CountDownLatch分析
一、互斥锁封装:Mutex.h github地址:https://github.com/chenshuo/muduo/blob/master/muduo/base/Mutex.h 1.1 MutexLock类互斥量是线程同步常用的变量,但在实际中一般都是使用封装的函数,这样便于操作。MutexLock封装临界区(critical section),这是一个简单的资源类,
2018-02-02 23:10:56 1456
原创 线程死锁问题
所谓死锁是指多个线程因竞争资源而造成的一种僵局,多个线程被无限的阻塞,线程之间相互等待所需的资源,若无外力作用,这些进程都将无法向前推进。 死锁的产生,通常是下面的两种情况: 1.如果线程试图对同一个互斥量加锁两次,那么它自身就会陷入死锁状态,使用互斥量时, 2.如果程序使用多个互斥量时,如果允许一个线程一直占有第
2018-02-02 08:24:42 227
Linux程序设计 中文第4版.part2.
2013-05-13
Linux程序设计 中文第4版.part1.
2013-05-13
C++程序设计语言特别版 03
2013-05-11
C++程序设计语言特别版 02
2013-05-11
C++程序设计语言特别版
2013-05-11
精通Eclipse
2013-05-09
精通Hibernate
2013-05-08
jsp项目开发案例全程实录
2013-05-08
C++设计模式
2013-01-24
LINUX命令、编辑器与SHELL编程 part4
2012-10-16
LINUX命令、编辑器与SHELL编程 part3
2012-10-16
LINUX命令、编辑器与SHELL编程 part2
2012-10-16
LINUX命令、编辑器与SHELL编程
2012-10-16
gtest-1.6.0.zip
2015-01-13
gtest-1.6.0
2015-01-13
scons-local-2.0.1
2015-01-13
swtoolkit.0.9.1.zip
2015-01-13
srtp-cvs.zip
2015-01-13
libjingle-0.6.2.
2015-01-13
WpdPack开发包
2014-07-25
嵌入式与实时系统开发:使用UML对象技术框架与模式.part2.
2013-05-27
编程珠玑(带有书签)
2013-05-27
windows installer 服务不能更新解决方法
2013-05-26
Linux程序设计 中文第4版.part5
2013-05-13
Linux程序设计 中文第4版.part4
2013-05-13
Linux程序设计 中文第4版.part3
2013-05-13
网络扫描技术揭秘(清晰且带有书签)
2013-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人