上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 25 下一页
摘要: queue简介 队列queue是一种先进先出(FIFO)的数据结构。有2个出口:允许从头部移除、查询元素,从尾部加入元素。除此之外,无法存取其他位置元素,也不允许遍历。 将元素推入queue的操作称为push,将元素推出queue的从中称为pop。 queue的数据结构 类似于stack,queue 阅读全文
posted @ 2022-05-08 19:43 明明1109 阅读(100) 评论(0) 推荐(0)
摘要: stack简介 栈stack是一种先进后厨(FILO)的数据结构,只有一个出口,即栈顶。stack支持新增元素、移除元素、取得栈顶元素,但都是针对栈顶元素的操作,无法存取其他位置元素。 也就是说,stack不支持不影响栈结构的遍历操作。 将元素插入stack的操作称为push,将元素从stack移除 阅读全文
posted @ 2022-05-08 19:41 明明1109 阅读(94) 评论(0) 推荐(0)
摘要: vector vs array 在SGI STL中,vector和array都是数组容器,两种操作非常相似。区别在于:array是静态空间,一旦配置就不能改变;vector是动态空间,随着新元素加入,内部机制或自行扩充空间以容纳新元素。 vector的迭代器 vector维护的是一个连续线性空间,不 阅读全文
posted @ 2022-05-08 14:43 明明1109 阅读(318) 评论(0) 推荐(0)
摘要: __type_traits基本概念 iterator_traits是STL针对迭代器加以规范,用来萃取迭代器特性的机制。SGI STL把这种技法扩大到迭代器以外的地方,于是有了__type_traits。(双下划线表示是内部所用,不在STL标准规范内) iterator_traits 提供机制,用于 阅读全文
posted @ 2022-05-05 20:32 明明1109 阅读(284) 评论(0) 推荐(0)
摘要: 迭代器的设计思想 GoF提到iterator设计模式: 提供一种方法,使之能依序巡访某个聚合物(容器)所含的各个元素,而又无须暴露该聚合物的内部表述方式。 STL中的iterator(迭代器)正是践行了这些设计模式,其中心思想:将数据容器(containers)和算法(algorithm)分离开,彼 阅读全文
posted @ 2022-05-05 18:06 明明1109 阅读(302) 评论(0) 推荐(0)
摘要: 内存基本处理工具 STL定义5个全局函数,并非空间配置器的内容,但作用于未初始化空间(空间配置器alloc配置的空间)上,对容器实现有帮助。 5个函数分别是: 1)construct()用于构造; 2)destroy()用于析构的; 3)uninitialized_copy(),对应于高层次函数st 阅读全文
posted @ 2022-05-05 08:54 明明1109 阅读(929) 评论(0) 推荐(1)
摘要: 空间配置器 基本概念 为什么叫allocator空间配置器,而不叫内存配置器? 因为空间不一定是内存,也可能是磁盘或其他辅助存储介质。可以写一个allocator,直接向硬盘取空间。 不过,实际上,我们最常用的就是用于配置内存。 空间配置器的标准接口 allocator标准接口: allocator 阅读全文
posted @ 2022-05-05 08:54 明明1109 阅读(1121) 评论(0) 推荐(1)
摘要: C++ 11知识点:std::is_convertible 简介 is_convertible用于判断是否可以转换:第一个模板参数的类型是否可以转换为第一个模板参数的类型。 如果To, From都是基本类型,那么可以隐式转换。 如果To是基类,From是子类,那么From可以转换为To。 class 阅读全文
posted @ 2022-05-02 17:56 明明1109 阅读(1638) 评论(0) 推荐(0)
摘要: C++ 11知识点:std::is_trivially_destructible 简介 判断一个类型T是否是一个平凡的可销毁类型(trivivally destructible)。主要用于检查这个类型的析构函数。 一个trivivally destructible类(由class,struct/un 阅读全文
posted @ 2022-05-02 17:51 明明1109 阅读(1675) 评论(0) 推荐(0)
摘要: 最大文件描述符数量 文件描述符是服务器程序的宝贵资源,几乎所有系统调用都是和文件描述符打交道。而系统分配给进程的文件描述符数量有限,因此需要及时关闭那些不用的文件描述符。 Linux对应用程序能打开的最大文件描述符数量,有2个层次限制:用户级限制,系统级限制。 1)用户级限制,是指目标用户运行的所有 阅读全文
posted @ 2022-05-01 20:41 明明1109 阅读(2339) 评论(0) 推荐(0)
摘要: UID、EUID、GID、EGID 几个常见用户信息概念:UID、EUID、GID、EGID UID:当前进程的真实用户ID; EUID:有效用户ID; 真实组ID:GID; 有效组ID:EGID; 可以通过下面这组函数获取和设置当前进程的用户信息: #include <sys/types.h> # 阅读全文
posted @ 2022-05-01 18:56 明明1109 阅读(616) 评论(0) 推荐(0)
摘要: tee() 在两个管道文件描述符之间复制数据,也是重要的零拷贝技术之一。tee不消耗数据,因此源文件描述符上的数据仍然可以用于后续的读操作。 tee签名 #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <fcntl.h> s 阅读全文
posted @ 2022-05-01 13:47 明明1109 阅读(440) 评论(0) 推荐(0)
摘要: splice用于在两个文件描述符之间移动数据,也是一种重要零拷贝技术。 splice声明 #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <fcntl.h> ssize_t splice(int fd_in, loff_t 阅读全文
posted @ 2022-05-01 09:55 明明1109 阅读(1586) 评论(0) 推荐(0)
摘要: 存储映射的基本概念 存储映射(memory map)简称mmap,是直接将实际存储的物理地址映射到进程空间,而不使用read/write函数。这样,可以省去中间繁杂调用过程, 快速对文件进行大量输入输出。 mmap() 用于申请一段内存空间,将一个文件或Posix共享内存区对象映射到进程的地址空间; 阅读全文
posted @ 2022-05-01 01:12 明明1109 阅读(5317) 评论(1) 推荐(0)
摘要: sendfile() 在2个文件描述符之间传递数据(完全在内核中),避免在内核缓冲区和用户缓冲区之间进行数据拷贝,效率很高。是一种重要的零拷贝技术。 sendfile原理 sendfile()系统调用利用DMA引擎将文件中的数据拷贝到操作系统的内核缓冲区中,然后数据被拷贝到与socket相关的内核缓 阅读全文
posted @ 2022-04-30 20:25 明明1109 阅读(4673) 评论(0) 推荐(1)
摘要: 介绍两种高性能定时器:时间轮和时间堆。 时间轮 基于排序链表的定时器,使用一条链表存放所有定时器(时间复杂度O(n)),因此存在添加定时器效率偏低的问题。当存在需要大量添加定时器场景时,添加定时器可能会严重影响性能。 时间轮可以有效解决这个问题。下图是一个简单时间轮的示意图: 时机轮内,实线指针指向 阅读全文
posted @ 2022-04-30 18:59 明明1109 阅读(720) 评论(0) 推荐(0)
摘要: fcntl(file control)提供对文件描述符的各种控制操作。另一个常见控制文件描述符的系统调用是ioctl,提供更多控制。 fcntl提供常用属性和行为的控制,是POSIX规定的首选方法。 本文对fcntl常用操作进行一个简要汇总。 fcntl 声明 #include <unistd.h> 阅读全文
posted @ 2022-04-30 18:53 明明1109 阅读(491) 评论(0) 推荐(0)
摘要: dup() 如何把标志输入(stdin)重定向到一个文件,或者把标志输出(stdout)重定向到一个网络连接(sockfd)? 可以用系统调用dup或dup2。 #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd 阅读全文
posted @ 2022-04-30 18:44 明明1109 阅读(1858) 评论(0) 推荐(0)
摘要: 目录TcpConnection回调TcpConnection回调有哪些?回调注册何时调用connectionCallback_?何时调用messageCallback_?何时调用writeCompleteCallback_,highWaterMarkCallback_?上下文数据传递知识点boost 阅读全文
posted @ 2022-04-13 00:28 明明1109 阅读(943) 评论(0) 推荐(0)
摘要: 目录应用层缓冲区Buffer设计Buffer设计思想Buffer要求线程安全Buffer数据结构Buffer的操作基本IO操作自动增长size()和capacity()内部腾挪prependBuffer类的实现构造函数与析构函数读取prependable, readable, writable空间地 阅读全文
posted @ 2022-04-12 17:42 明明1109 阅读(2087) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 25 下一页