
C++
wilson_go
这个作者很懒,什么都没留下…
展开
-
libevent库
1 事件驱动, 高性能, 轻量级, 专注于网络2 源代码精炼, 易读3 跨平台4 支持多种I/O多路复用技术, 如epoll select poll等5 支持I/O和信号等事件。原创 2022-11-20 22:13:46 · 556 阅读 · 0 评论 -
linux进程回收
当一个进程退出之后,进程能够回收自己的用户区的资源,但是不能回收内核空间的PCB资源,必须由它的父进程调用wait或者waitpid函数完成对子进程的回收,避免造成系统资源的浪费。为了保证每个进程都有一个父进程,孤儿进程会被init进程领养,init进程成为了孤儿进程的养父进程,当孤儿进程退出之后,由init进程完成对孤儿进程的回收。若子进程死了,父进程还活着, 但是父进程没有调用wait或waitpid函数完成对子进程的回收,则该子进程就成了僵尸进程。通过杀死其父进程的方法可以消除僵尸进程。原创 2022-11-13 17:34:39 · 810 阅读 · 0 评论 -
c++11 lock_guard 锁
c++11推出了std::lock_guard自动释放锁,其原理是:声明一个局部的lock_guard对象,在其构造函数中进行加锁,在其析构函数中进行解锁。最终的结果就是:在定义该局部对象的时候加锁(调用构造函数),出了该对象作用域的时候解锁(调用析构函数)std::lock_guard只有构造函数和析构函数。简单的来说:当调用构造函数时,会自动调用传入的对象的lock()函数,而当调用析构函数时,自动调用unlock()函数。原创 2022-11-06 22:21:49 · 1335 阅读 · 0 评论 -
C++模板
template //T代表一个通用的数据类型,告诉编译器如果下面紧跟着的函数或者类中出现T不要报错。原创 2022-10-22 18:07:37 · 162 阅读 · 0 评论 -
iostream no such file or directory的问题
C++编译出现iostream no such file or directory的后。原创 2022-10-16 00:18:26 · 1745 阅读 · 1 评论 -
undefined reference to `std::cout‘的问题
使用g++编译,g++是专门针对c++文件编译的,如。原创 2022-10-16 00:15:37 · 1435 阅读 · 0 评论 -
C++函数对象总结
STL内建了一些函数对象,分为:算术类函数对象,关系运算函数对象,逻辑运算类函数。这些仿函数所产生的对象,用法和一般函数完全相同,当然我们还可以产生无名的临时对象来履行函数功能,使用内建函数对象,需要引入头文件 #include。重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数,其实就是重载()操作符,使得类对象可以像函数那样调用。函数对象超出普通对象的概念,函数对象可以由自己的状态。1 函数对象(仿函数)是一个类,不是一个函数。原创 2022-10-06 17:46:43 · 632 阅读 · 2 评论 -
STL容器常见操作
【代码】STL容器常见操作。原创 2022-10-06 16:25:00 · 143 阅读 · 0 评论 -
STL概论
STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。算法:各种常用的算法,如sort、find、copy、for_each。从实现的角度来看,STL算法是一种function tempalte.原创 2022-10-06 14:52:05 · 140 阅读 · 0 评论 -
namespace命名空间
2当using编译指令 与 就近原则同时出现,优先使用就近。1.2当using声明与 就近原则同时出现,出错,尽量避免。命名空间是开放的,可以随时将新成员添加到命名空间下。命名空间下可以存放 : 变量、函数、结构体、类…3当using编译指令有多个,需要加作用域 区分。命名空间必须要声明在全局作用域。命名空间用途:解决名称冲突。命名空间可以嵌套命名空。原创 2022-09-18 16:27:34 · 178 阅读 · 0 评论 -
内存泄漏分析valgrind
valgrind 官网 https://www.valgrind.org/valgrind 是 Linux 业界主流且非常强大的内存泄漏检查工具。在其官网介绍中,内存检查(memcheck)只是其其中一个功能。由于只用过其内存泄漏的检查,就不拓展分享 valgrind 其他功能了。valgrind 这个工具不能用于调试正在运行的程序,因为待分析的程序必须在它特定的环境中运行,它才能分析内存。原创 2022-09-04 11:23:13 · 2593 阅读 · 0 评论 -
TCP三次握手和四次挥手状态
如果客户端跑路后有新的客户端接入,会在此发送「SYN」以期望建立连接,此时这个「SYN」将被忽略,并直接回复「FIN,ACK」消息,新客户端在收到「FIN」消息后是不会认的,并且会回复一个「RST」消息。客户端收到之前「FIN」的回复「ACK」消息后,进入 FIN-WAIT-2 状态。而对服务端而言,如果发送的「SYN,ACK」包丢了,在超时时间内没有收到客户端发来的「ACK」包,也会触发重传,此时服务端处于 SYN_RCVD 状态,会依次等待 3s、6s、12s 后,重新发送「SYN,ACK」包。...原创 2022-08-28 18:24:42 · 740 阅读 · 0 评论 -
Linux c++下socket网络通信的 端口复用问题
如果是服务器端需要主动断开连接(例如网站更新等), 那么再次重启则需要浪费2msl时间, 为了减少这种时间开销, 因此有了端口复用。: 由socket状态转换图可知, 主动关闭连接的一端都会有一个TIME_WAIT, 时间为2msl, 以确保对端收到最后一个ACK。: 可以立马重启服务器, 而不必等待2msl, 且不会在bind的时候发生端口被占用的错误....原创 2022-08-28 17:37:08 · 1027 阅读 · 0 评论 -
C++ 的typedef详解
如:typedef int (*A) (char, char);A是我们定义的别名,表示的是一个指向函数的指针,该函数有两个char类型的参数,返回一个int类型的值。则A类型的对象可以指向任何符合上述规则的函数。原创 2022-08-28 09:35:09 · 799 阅读 · 0 评论 -
kafka的epoch
Leaderepoch(1,120)说明这个leader的版本号为1,版本的起始位置是第120条消息开始的KafkaBroker会在内存中为每个分区都缓存LeaderEpoch数据,同时它还会定期地将这些信息持久化到一个checkpoint文件中。当Leader副本写入消息到磁盘时,Broker会尝试更新这部分缓存。这样,每次有Leader变更时,新的Leader副本会查询这部分缓存,取出对应的LeaderEpoch的起始位移,以避免数据丢失和不一致的情况。...原创 2022-07-31 19:58:12 · 1603 阅读 · 0 评论 -
tcp框架需要解决的问题
不能让goroutine无限扩张,固定数目,处理。worker从消息队列从消费消息,处理。处理消息,利用用户注册的回调函数,处理完结束。根据客户端消息的类型,分配messageID,根据messageID识别消息,绑定回调函数,调用相应的函数处理。当把数据处理完,发送到消息队列中,如发送到第五个消息队列5worker5读到消息,worker去apis中找。7、自动启动固定数目的workergoroutine进行消息的处理,避免goroutine的无线扩张。2、自动封包,解包,解决TCP粘包问题。...原创 2022-07-23 21:20:16 · 744 阅读 · 0 评论 -
C++string类写时拷贝
string类内存分配的概念:string类中必有一个私有成员(char*),用户记录从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存;string类在返回这块内存地址时,只返回const char*,也就是只读的,如果你要写,你只能通过string提供的方法进行数据的改写。在string类中,要实现写时才拷贝,需要解决两个问题,一个是内存共享,一个是Copy-On-Wirte(COW)。1、什么时候内存共享:a)以别的类构造自己,b)以别的类赋值。第一种情况时会触发拷贝构造函数,第二种情况原创 2022-02-27 18:55:24 · 839 阅读 · 0 评论 -
c++11容器新特性
一、容器总结1、std::arraystd::array跟数组并没有太大区别,std::array相对于数组,增加了迭代器等函数。2、std::forward_liststd::forward_list为从++新增的线性表,与list区别在于它是单向链表。我们在学习数据结构的时候都知道,链表在对数据进行插入和删除是比顺序存储的线性表有优势,因此在插入和删除操作频繁的应用场景中,使用list和forward_list比使用array、vector和deque效率要高很多。3、std::unorder原创 2022-02-16 00:06:45 · 943 阅读 · 0 评论 -
面向对象思想
1、OO:OO(Object Oriented,面向对象)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。 2、OOD:面向对象设计面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。&n原创 2022-02-02 19:57:13 · 186 阅读 · 0 评论