自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 ffmpeg_transcode_aac.c修改为流式的输入和输出

ffmpeg AVIOContext流式处理音频

2023-01-12 17:28:59 357

原创 顺序类容器

顺序容器 vector deque list forward_list array string 顺序容器提供的是快速访问元素的能力。 以下的方面性能折中: (1)向容器中添加和删除元素 (2)非顺序的访问容器中的元素的代价。 array:不支持添加和删除元素以及改变容器大小的操作。 使用swap swap可以交换两个相同类型容器的内容。 除了array之外,交换两个容器内容的操作很快–元素本身并未交换,swap只是交换了两个容器的内部结构。意味着元素不会被移动,除了string之外,

2021-06-24 16:10:31 160

原创 std::bind和std::function实现回调

定义一个私有的std::function对象,然后提供一个接口供外部调用设置该对象,在使用该处理数据。 #ifndef THREADOBJECT_H #define THREADOBJECT_H #include <functional> #include <string> class ThreadObject { public: ThreadObject(){} ~ThreadObject(){} public: void settask(std::f

2021-06-23 15:23:02 403

原创 Lambda表达式

lambda表达式(可调用对象) 一个lambda表达式是一个可调用的代码单元.可以理解为未被命名的内联函数. 但是与函数不同, lamda可能定义在函数内部. [capture list](parameter list) -> return type{function body} capture list: lambda所在函数中定义的局部变量的列表 parameter list:参数列表可忽略. 捕获列表和返回类型是必须包含的. 1)lambda捕获和返回 当定义一个lambda时,编译器生成一

2021-06-22 17:08:36 150

原创 protobuf简单学习

(1)创建IDL描述文件playaudio.protoc。 通过protobuf定义服务端与客户端之间的rpc调用接口,通过protoc工具生成客户端和服务端代码。gRPC是需要定义服务接口约定,才可以调用RPC调用,使用.protoc可以同时定义客户端和服务端交换的数据格式以及rpc调用的接口。 syntax = "proto3"; package AUDIO; message textToSpeechRequest{ string text = 1; } message textToSp

2021-06-22 09:28:40 257

原创 2021_6_20杂文

端口号只有65535,如何做到百万并发量? 每一个socket都对应着一个五元组。 (remote ip, remote port, local ip, local port, proto(TCP/UDP)); 而65535只是local port的数量,其他的客户端的remote ip 和 remote port都有很多。 如何实现多个客户端来连接服务器? 1VS多一请求多线程的方式(比较少的客户端的情况可以实现) 弊端:并发量上不去(上百并发量) io多路复用:select/poll/epoll (检测

2021-06-20 16:25:14 193 1

原创 Linux高性能服务器编程13-15

第13章 #include <sys/types.h> #include <unistd.h> pid_t fork(void) 返回两次每次调用都是返回两次,在父进程中返回的是子进程的PID,在子进程中则返回0。 父进程和子进程 相同的是:堆指针、栈指针和标志寄存器的值 不同的是:该进程的PPID被设置为原进程ID,信号位图被清除(原进程设置的信号处理函数不再对新进程起作用) 子进程的代码与父进程的代码完全相同,同时它还会复制父进程的数据(堆数据、栈数据和静态数据)。数据的复制采用

2021-05-18 20:19:06 140

原创 Linux高性能服务器编程9-11

第9章 实现IO复用的系统调用有select、poll和epoll。 select:(三个问题:基础API、如何判断文件描述符就绪?如何处理带外数据) #include <sys/select.h> int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout); nfds:所要监听的文件描述符的总数(从0开始,设置为select监听的所有的文件描述符的最大值+

2021-05-14 16:13:20 135

原创 Linux高性能服务器编程第2章-第8章

DNS具体的解析过程: (1)浏览器缓存 (2)系统缓存 hosts文件 IP协议: IP协议提供的是无状态、无连接、不可靠的服务。 IP分片:可能会发生在发送端也有可能发生在中转路由器上 分片和重组提供足够的信息:(数据报标识、标志、片偏移) ping程序使用的是ICMP回显和应答报文的头部长度8字节 IP路由 发送端执行的写操作次数和接收端执行的读操作次数之间没有任何的数量的关系,------------------字节流的概念 TCP传输是可靠的: 首先,TCP协议采用的是发送应答机制,发送端发送的

2021-05-12 20:26:15 411 1

原创 单例模式

懒汉式--------局部静态变量 class single{ public: static single* getinstance(); private: static pthread_mutex_t lock; single(){ pthread_mutex_init(&lock, NULL); } ~single(){} } pthread_mutex_t single::lock; single* single::getinstance() { pthread_mutex_l

2021-04-22 22:33:55 103

原创 服务器编程的初步探索(定时,IO复用,信号统一事件源)

服务器编程的初步探索: 服务器程序通常需要处理的三类事件:I/O事件,信号及定时事件。有两种事件的处理模式: Reactor模式:要求主线程(IO处理单元)只负责监听文件描述符上是否有事件发生(可读可写),若有,则立即通知工作线程(逻辑单元),将socket可读可写的时间放到可读可写的请求队列中,交给工作工作线程处理。 Rroactor模式:将所有的IO操作都交给主线程和内核来处理(读,写),工作线程仅仅负责处理逻辑,如主线程读完之后user[sockfd].read(),选择一个工作线程来处理客户的请求p

2021-04-15 22:41:47 374

原创 C++

C++模糊概念集合: 1. Virtual的析构函数 C++中基类采用的virtual虚析构函数是为了防止内存泄漏。 分析:当派生类中申请了内存空间,并在析构函数中对这些内存空间进行释放。假设基类采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而就只会调用基类的析构函数,而不会调用派生类的析构函数,那么派生类申请的空间就得不到释放从而产生内存泄漏。防止此类情况,因而基类的析构函数采用的时virtual虚析构函数。 2.单例模式 1)为了确保一个类只有一个实例被创建 2)提供一个对

2021-04-15 16:21:49 102

空空如也

空空如也

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

TA关注的人

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