LYsnowQの博客小屋
cpp网络编程基础(五)
阻塞&非阻塞以及触发方式
cpp网络编程基础(四)
IO多路复用模型
c++网络编程基础(一)
网络架构以及TCP和UDP
c++网络编程基础(二)
网络字节序和主机字节序以及结构体的介绍和作用
cpp网络编程基础(三)
握手机制与socket函数详解
线程、锁,原子操作使用以及无定义行为解读和处理
线程的创建和使用 ​ 线程库中创建多线程的库是thread库,基本的线程创建是使用std::thread,如果创建了线程但是没有等待线程结束就会报错,此时有两种方式,第一种使用join()方法让主线程等待子线程完成工作。第二个就是分离子线程使其单独在后台运行,方法为detach()。当整个进程结束时整个子线程的资源才会被跟着回收。 ​ 其中每个线程只能使用一次join,如果多次使用就会抛出异常,其中方法joinable()就是判断是否可以进行join或者detach() 12345678910111213141516171819202122232425262728#include <iostream>#include <thread>#include <string>void printStr(std::string str) { std::cout << str << std::endl;}int main() { // 创建线程 std::thread thread1(printSt ...
伪共享
CPU基本架构了解 伪共享本质是cpu的缓存问题,那么首先先介绍cpu的读写问题。 首先是cpu的架构。cpu一般不止一个核心,有多个核心,其中如上图,每个核心自己会有两个缓存区,即L1 Cache(由指令缓存区(iCache)和数据缓存区(dCache)组成),L2 Cache这两个缓存区间,其中所有核心还有个共享缓存区间,即L3 Cache。以上就是cpu的典型架构。 ​ 共享缓存中的内容遵循MESI协议。MESI 协议是指一种缓存一致性协议,用于确保多核处理器系统中各个核心的缓存数据与内存数据保持一致。其通过跟踪每个缓存行的状态来管理数据的一致性,这四个状态的首字母分别代表:Modified、Exclusive、Shared 和 Invalid。这个协议允许处理器核心之间进行有效的数据同步,从而避免数据不一致的问题。 ​ 其中L1和L2的随机访问延时分别是1ns和4ns。这里缓存器主要作用是将数据提前写入缓存层,减少对内存的频繁访问量和节省时间。当cpu从内存读取数据时并非是将数据挨个按照字节读取,而是一次性写入一整块内存内容,这一整块内容我们称之为Cache Line(缓 ...
c++中的计时器
c++中的计时
c++中类型双关和关联体
c++中类型双关和关联体基础概念及使用场景
c++的线程和名称空间
c++的名称空间和线程的使用
函数指针和lambda函数
函数指针 函数的本质是一个指针,在c++中我们可以将函数赋值给一个变量,但是在实际过程中,这个变量得到的是函数的地址,也就是函数指针,在cpu中我们每次编译函数都是由cpu直接编译,存在于二进制文件中。 则函数变量的类型语法为:返回值类型(*变量名)(函数参数类型); 示例如下: 12345678910111213141516171819202122232425262728293031323334#include <iostream>void HelloWorld(){ std::cout << "HelloWorld" << std::endl;}void PrintNumber(int x){ std::cout << "HelloWorld" << x << std::endl;}int main(){ HelloWorld();//直接调用函数 auto fun1 = HelloWorld;//将函数赋值给一个变量。此 ...
c++处理多返回值
c++中tuple和pair等多返回问题
avatar
🐟认真摸鱼中
LYsnowQ
喜爱吃喝玩乐,语言中偏爱cpp和py,喜欢ACG和game,社交?来者即为友。
前往小窝
小站资讯
文章数目 :
40
本站总字数 :
5w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换阅读模式关于博客美化设置切换全屏打印页面