muduo大并发服务器
INGNIGHT
这个作者很懒,什么都没留下…
展开
-
计数器限流
【代码】计数器限流。原创 2023-06-08 21:03:13 · 65 阅读 · 0 评论 -
Bounded-Buffer
原创 2023-05-25 13:44:49 · 96 阅读 · 0 评论 -
数据库连接池
【代码】数据库连接池。原创 2023-04-10 21:14:50 · 67 阅读 · 0 评论 -
测量两台机器的的网络延迟和时间差
一、roundtrip用于测量两台机器之间的网络延迟,即“往返时间(round trip time,RTT)”,其主要考察定长TCP消息的分包与TCP_NNODELY作用代码:https://github.com/chenshuo/muduo/blob/master/examples/roundtrip/roundtrip.cc二、连通性和延时我们通常使用 ping ,来测...原创 2019-09-03 15:21:50 · 6220 阅读 · 0 评论 -
30muduo_net库源码分析(六)
1.EventThread(1)任何一个线程,只要创建并运行了EventLoop,都称之为IO线程(2)IO线程不一定是主线程(3)muduo并发模型one loop per thread + threadpool(4)为了方便今后使用,定义了EventLoopThread类,该类封装了IO线程(5)EventLoopThread创建了一个线程(6)在线程函数中创建了一原创 2017-09-02 15:51:55 · 338 阅读 · 0 评论 -
29muduo_net库源码分析(五)
1.进程(线程)wait/notify(1)pipe(2)socketpair(3)eventfd,eventfd是一个比 pipe更高效的线程间事件通知机制,一方面它比 pipe 少用一个file descripor,节省了资源;另一方面,eventfd的缓冲区管理也简单得多,全部“buffer”只有定长8 bytes,不像 pipe 那样可能有不定长的真正buffer。in原创 2017-09-02 15:46:00 · 402 阅读 · 0 评论 -
16muduo_base库源码分析(七)
1.ThreadPool类图2.代码ThreadPool.h// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Shuo Chen (chenshuo at chenshuo dot com)原创 2017-08-20 12:30:35 · 379 阅读 · 0 评论 -
34muduo_net库源码分析(十)
1.连接关闭时序图2.代码1.TcpConnection.h// Copyright 2010, Shuo Chen. All rights reserved.// http://code.google.com/p/muduo///// Use of this source code is governed by a BSD-style license// that原创 2017-09-10 19:56:33 · 551 阅读 · 0 评论 -
33muduo_net库源码分析(九)
1.TcpServer/TcpConnection(1)Acceptor类的主要功能是socket、bind、listen(2)一般来说,在上层应用程序中,我们不直接使用Acceptor,而是把它作为TcpServer的成员TcpServer还包含了一个TcpConnection列表(3)TcpConnection与Acceptor类似,有两个重要的数据成员,Socket与Chan原创 2017-09-10 19:31:49 · 399 阅读 · 0 评论 -
20muduo_base库源码分析(十一)
1.日志作用(1)开发过程中:调试错误,更好的理解程序(2)运行过程中:诊断系统故障并处理,记录系统运行状态2.日志级别(1)TRACE 指出比DEBUG粒度更细的一些信息事件(开发过程中使用)(2)DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的。(开发过程中使用)(3)INFO 表明消息在粗粒度级别上突出强调应用程序的运行过程。(4原创 2017-09-02 22:18:10 · 385 阅读 · 0 评论 -
32muduo_net库源码分析(八)
1.Acceptor(1)Acceptor用于accept(2)接受TCP连接(2)Acceptor的数据成员包括Socket、Channel,Acceptor的socket是listening socket(即serversocket)。Channel用于观察此socket的readable事件,并回调Accptor::handleRead(),后者调用accept(2)来接受新连接原创 2017-09-10 19:21:50 · 339 阅读 · 0 评论 -
12muduo_base库源码分析(三)
1.Exception类实现 (1)backtrace,栈回溯,保存各个栈帧的地址 (2)backtrace_symbols,根据地址,转成相应的函数符号 (3)abi::__cxa_demangle2.代码Exception.h// Use of this source code is governed by a BSD-style license//原创 2017-07-30 15:53:43 · 469 阅读 · 0 评论 -
13muduo_base库源码分析(四)
1.线程标识符(1)Linux中,每个进程有一个pid,类型pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共原创 2017-07-30 20:36:33 · 457 阅读 · 0 评论 -
08面向对象编程风格
1.Thread类图2.代码Thread.h#ifndef _THREAD_H_#define _THREAD_H_#include class Thread{public: Thread(); virtual ~Thread(); void Start(); void Join(); void SetAutoDelete(bool autoDelete)原创 2017-07-27 23:03:05 · 283 阅读 · 0 评论 -
09基于对象编程风格
1.boost bind/functionboostbind/function库的出现,替代了stl中的mem_fun,ptr_fun,bind1st,bin2nd等函数#include #include #include using namespace std;class Foo{public: void memberFunc(double d, int i,原创 2017-07-27 23:14:29 · 389 阅读 · 0 评论 -
15muduo_base库源码分析(六)
1.BoundedBlockingQueue(有界缓冲区)BoundedBlockingQueue.h// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Shuo Chen (chensh原创 2017-08-19 22:01:00 · 351 阅读 · 0 评论 -
17muduo_base库源码分析(八)
1.Singleton类图线程安全Singleton类实现(1)pthread_once(2)atexit(3)typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1];2.代码Singleton.h// Use of this source code is governed by a原创 2017-08-20 13:29:35 · 474 阅读 · 0 评论 -
18muduo_base库源码分析(九)
1.线程特定数据(1)在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。(2)在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。(3)但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。(4)POSIX线程库通过维护一定的数据结构来解决这个问题,这个些数据称为(Thread-specific Data,原创 2017-08-20 14:08:13 · 371 阅读 · 0 评论 -
19muduo_base库源码分析(十)
1.ThreadLocalSigleton类图每一个线程都有一个T类型的单例对象2.代码ThreadLocalSingleton.h// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Sh原创 2017-08-20 15:11:13 · 431 阅读 · 0 评论 -
25muduo_net库源码分析(一)
1.TCP网络编程本质TCP网络编程最本质是的处理三个半事件(1)连接建立:服务器accept(被动)接受连接,客户端connect(主动)发起连接(2)连接断开:主动断开(close、shutdown),被动断开(read返回0)(3)消息到达:文件描述符可读(4)消息发送完毕:这算半个。对于低流量的服务,可不必关心这个事件;这里的发送完毕是指数据写入操作系统缓冲区,将由原创 2017-08-20 21:25:17 · 403 阅读 · 0 评论 -
31muduo_net库源码分析(七)
1.Socket封装(1)Endian.h 封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。(2)SocketsOps.h/ SocketsOps.cc 封装了socket相关系统调用(全局函数,位于muduo::net::sockets名称空间中)。(3)Socket.h/Socket.cc(Socket类) 用RAII方法封装原创 2017-09-03 20:00:16 · 432 阅读 · 0 评论 -
26muduo_net库源码分析(二)
1.类图2.Channel(1)Channel是selectable IO channel,负责注册与响应IO事件,它不拥有filedescriptor。(2)Channel是Acceptor、Connector、EventLoop、TimerQueue、TcpConnection的成员,生命期由后者控制。3.时序图4.代码EvevtLoop.h原创 2017-08-23 13:38:56 · 402 阅读 · 0 评论 -
27muduo_net库源码分析(三)
1.定时器函数选择1.定时函数,用于让程序等待一段时间或安排计划任务:sleep alarm usleepnanosleepclock_nanosleepgetitimer /setitimertimer_create /timer_settime /timer_gettime /timer_deletetimerfd_create原创 2017-08-23 20:56:35 · 421 阅读 · 0 评论 -
28muduo_net库源码分析(四)
1.定时器(1)muduo的定时器由三个类实现,TimerId、Timer、TimerQueue,用户只能看到第一个类,其它两个都是内部实现细节(2)TimerQueue的接口很简单,只有两个函数addTimer和cancel(3)EventLooprunAt 在某个时刻运行定时器runAfter 过一段时间运行定时器runEvery 每隔一段时间运行定时器can原创 2017-08-24 15:28:29 · 429 阅读 · 0 评论 -
46muduo库使用示例(五)
1.RTT计算2.代码#include #include #include #include #include using namespace muduo;using namespace muduo::net;const size_t frameLen = 2*sizeof(int64_t);void serverConnectionCallback(const原创 2017-09-17 19:21:07 · 539 阅读 · 0 评论 -
11muduo_base库源码分析(二)
1.为什么需要原子性操作(1)x++;(2)从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x所处的内存地址2.gcc原子性操作// 原子自增操作type __sync_fetch_and_add (type *ptr, type value)// 原子比较和交换(设置)操作type __sync_val_compare_and_swap (typ原创 2017-07-29 16:18:59 · 412 阅读 · 0 评论