瓶子的跋涉
🏺

瓶子的跋涉

=YuHeShui=

C++11新特性绑定器包装器

C++11新特性绑定器包装器

# 定义别名 > `using` 和`typedef`一样,并不会创建新的类型,他们只是给某些类型定义了`新的别名`,using相教于typedef的优势在于定义函数`更加直观`,并且可以给模版`定义别名` 而`typedef `无法`定义模版` ```cpp typedef 旧的类型名 新的类型名; typedef unsigned int uint_t; //使用using 定义 using 新的类型 = 旧的类型; using uint_t = int; //定义函数指针对比 typedef int(*func)(int,double); using func = int(*)(int
more...
红黑树

红黑树

# 红黑树 > `Red-black tree` 自平衡二叉查找树,可在`O(log n)`时间内完成查找,插入和删除。 > > 强查找. * `Linux` 进程调度`CFS` * `epoll` 事件块的`管理` * `Nginx Timer`事件管理 # 性质 * 每个节点是`红色`的或者`黑的` * `根`节点是`黑的` * 每个`叶子`节点是`黑的` * 如果一个节点是`红的`,则它的`两个儿子`都是`黑`的 * 对每个节点,从该节点到其`子孙节点`的所有路径上包含`相同的黑节点` (最低和最高的差最长为`2*n -1`,最多旋转树高) # 用途 * `key value
more...
Linux后台服务器simple

Linux后台服务器simple

# Http高并发服务器(Reactor模型)01 simple ## 开发环境 ### 系统 > `Visual studio 2022 + WSL`子系统, 详细查看 [微软教程 ](https://learn.microsoft.com/zh-cn/cpp/linux/?view=msvc-170) [^1] > > `解决方案文件下->文件名->属性` > > * 常规->`远程根目录`(可设置项目上传的目录) > * `C/C++` -> 语言 -> `C语言标准` -> 选择` C11 (GNU Dialect) (-std=gnu11)` > * 链接器 -> `输入`
more...
linux IO多路复用

linux IO多路复用

# I/O多路复用(转接) * 处理并发, * 多进程/多线程并发,`accept`检测`客户端连接`请求和子线程和建立连接的客户端`通信`,都会`发送阻塞`,有新客户端`连接`/有`数据`到达才会`解除阻塞`。 * IO多路转接并发 > 委托`内核`帮助`检测文件描述符`的`状态`(`通信`和`监听`两类), > 在通信过程中监听(连接请求信息)和通信(读和写)都会放到`读写缓冲区`中,当`调用accept`就会检测`监听中`是否有连接请求,如果没有则会`一直阻塞`。通信的读写缓冲区也是阻塞的。当只有`一个线程`时,`监听和两个通信`都会处于阻塞状态,相互冲突, > 基于内核可以同时监听多
more...
Qt多线程TCP

Qt多线程TCP

# Qt多线程文件传输项目 ## 通信流程 ![项目流程](https://mmbiz.qpic.cn/mmbiz_jpg/ORog4TEnkbsFicNFBiapQDKsSRiahVHibKMxSxSOXS7CC8icZxSWuGTKaP2KfpR4iayAjGVCKm8ibwEtwwJzgCfewneEw/640?wx_fmt=jpeg "项目流程") ## 项目文件 > `pro`文件添加`network模块` ### 服务端 #### `mainwindow.h` ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H #in
more...
Qt套接字通信

Qt套接字通信

# TCP通信 > Qt需要`network`模块实现套接字通信,在pro文件中提前加入。所有通信函数与C++封装TCP通信类似。 ## 通信与函数 ![TCP通信函数](https://mmbiz.qpic.cn/mmbiz_jpg/ORog4TEnkbuAZEWbsPKptycVwDzZkVekqHGlibgmve07tfGR0CuIoicEUtbA8aPcnVEloaZYglROleE906pz4yQA/640?wx_fmt=jpeg "函数与信号") ## TCP通信案例 ### 服务端 #### `UI` ![服务端](https://mmbiz.qpic.cn/mmb
more...
linux信号

linux信号

# 信号 > `信号`本质是一个`整数`,不同的信号对应不同`的值`,由于信号的结构简单,不能携带大量信息量,在系统中的`优先级非常高` ## 信号编号 ![信号编号](https://mmbiz.qpic.cn/mmbiz_png/ORog4TEnkbuAZEWbsPKptycVwDzZkVekAeF40TOFSQZEJriaz5jNYmwCS5ZTVZSRWQkYpbTu3M7aQUTbMALeBGg/640?wx_fmt=png "信号编号") * `SIGHUP `: 用户`退出shell`时,由shell启动的`所有进程都收到此信号` * `SIGINT` : 用户按`下Ct
more...
linux套接字通信UDP

linux套接字通信UDP

## UDP通信 > `UDP`是一个面向`无连接`的(不需要connect操作),不安全的,报式传输层协议,`UDP`的通信过程也是`默认阻塞`的 > > `UDP`首部没有关于数据顺序的信息,若数据丢失,就`全部丢失`,不存在一半的情况,发送端不知道数据是否非正确接受,也不会重发数据。 > > 在`UDP通信`过程中,哪一段是接受数据的角色,那么这个接收端就`必须绑定`一个固定的`端口` ![UDP通信流程](https://mmbiz.qpic.cn/mmbiz_jpg/ORog4TEnkbvmibuwoQgfcoib5NIC1Lr4VBxpddJQRVWicmLkibthzMib0
more...
套接字通信 TCP

套接字通信 TCP

# 套接字通信 > 设计者开发的`接口`,以便应用程序调用该通信接口进行`通信` ![网络层次](https://mmbiz.qpic.cn/mmbiz_jpg/ORog4TEnkbvmibuwoQgfcoib5NIC1Lr4VBdg4IDdiaZCFfxhmZDRwLefN5W0KhhNMFlHgwWH5hLGs4MSdWp2hB7TA/640?wx_fmt=jpeg "网络层次") ## 字节序 > 字节的顺机序,大于一个字节类型的数据在内存中的存放顺序。 * `Little-Endian` 小端模式:数据的`低`位字节存在`低位`,PC机默认低位 * `Big-Endian`:大端模式
more...
linux多线程总

linux多线程总

# Linux多线程 > 线程时轻量级的进程(`LWP: light weight process`),在`linux`环境下线程的本质仍是`进程`,进程时资源分配的`最小单位`,线程时操作系统调度执行的`最小单位` > > 上下文切换:进程/线程`分时复用CPU时间片`,在切换之前会将上一个任务的状态进行保存,下次切换回这个任务的时候,加载这个状态继续运行,任务从保存到再次加载这个进程就是一次`上下文切换`,线程更加廉价,启动速度更快,退出也快,对系统资源`冲击小`。线程并不是越多越好, > > 文件IO操作 : 线程的个数 = `2* CPU核心数`(效率最高) > > 处理`复杂算法`
more...