自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不爱吃馒头的博客

随便写点东西,认真不了一点

  • 博客(9)
  • 收藏
  • 关注

原创 手写线程池关键API

queue->tail就相当于queue->tail->next,这里真的值得细品,建议结合内存模型细细分析,linux源码中对于队列也是这样的操作,同时将next指针设为void。get调用的是pop,当pop不出任务时,也就是队列中没有任务时,队列会将线程堵塞,直到有任务添加到队列中才会唤醒。向队列中加任务,这里可以着重注意队列结构体中的tail指针的处理,它是一个二级指针,而task中首地址是指向下一个任务的void*指针,*link就是next指针,分配任务资源,并将任务放入队列中。

2024-06-26 22:12:05 309

原创 小心emplace_back的传参限制,请显式传参!

今天在力扣刷题时,我发现了一个问题,当我使用emplace_back时会出现报错,但是使用push_back时不会。在我之前的学习中学到的是两者语义相同,而emplace_back比push_back的效率更高,尽可能使用emplace_back。所以当我碰到这样的问题就开始出现了疑问,便开始在网上寻找原因。

2024-06-11 15:38:28 297

原创 手写内存泄漏组件

内存泄漏是指在程序运行过程中未释放已经分配的内存空间,导致这部分内存无法再被程序使用(也就是调用了malloc而没有使用free进行释放)。如果内存泄漏问题严重,会导致系统的可用内存逐渐减少,最终可能引发程序崩溃或者系统性能下降。

2024-06-04 09:22:49 348

原创 有锁队列VS无锁队列

标题:无锁队列 vs 有锁队列:性能与并发的对比介绍简要介绍无锁队列和有锁队列的概念和作用。引入话题,说明为什么无锁队列和有锁队列在并发编程中具有重要意义。无锁队列(Lock-Free Queue)介绍无锁队列的工作原理和特点。讨论无锁队列的优势,如高性能、低延迟和适用于高并发场景。举例说明无锁队列的应用场景,如高频率交易系统、实时数据处理等。有锁队列(Lock-Based Queue)介绍有锁队列的工作原理和特点。

2024-04-20 22:42:34 1612

原创 vscode远程连接Ubuntu配置go的Update组件报错go.tools.install not found

最好使用安装包下载,用sudo apt install golang-go下的版本可能很老旧,基本可能要重下,而且可能产生意想不到的错误(这可能也是我报错的原因,可能路径和之前设置的不一样,然后又不知道怎么改回来)解压,最好放在usr/local/目录下,其他目录比如/opt/下也行(原因之后解释)。之后就是配置环境变量,比如PATH,GOPATH,GOROOT,GOBIN,之后将设置写入配置文件持久化之后使用go env和go version查看配置就行,重启vscode。

2024-04-15 20:28:22 413 1

原创 手写简单内存池(c和c++)

这是实现内存池功能的四个接口,分别是初始化内存池,销毁内存池,分配内存块,释放内存块。代码看着蛮清晰易懂的,唯一的难点可能是*(char**)这个指针的操作,以init函数中的为例:先是拿到指向空余内存块的指针,然后循环内存块,将ptr指针强转为二级指针再解引用,也就是每个内存块中的首部包含了一个char*,指向下一个节点,从而形成了一个链表。fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,纯c和cpp实现的简单内存池,均是申请固定大小的内存块。

2024-04-11 21:32:36 581

原创 新手学习协程

在主函数中分别设置两个上下文指针,用指针指向函数的上下文并初始化,从swapcontext开始循环。将主函数设置为一个调度器,实现协程func1和func2的调度和切换,效果和上面是一样的。逻辑还是比较清晰明了,可以自己体会。同步的编程方式,异步I/O性能。

2023-12-21 15:02:00 358 1

原创 epoll面向io和面向事件编程

开始循环,等待出现就绪事件,遍历就绪事件,将i的文件描述符设为connfd,将请求的客户端文件描述符clientfd中的事件状态设为可读,并将clientfd加入到epfd中,如果显示这是这是一个就绪事件并且是可读的,则接收数据并在epfd中将connfd删除,最后输出数据。监听函数,功能是创造clientfd,将其设置为可读状态并接入到epoll实例中,初始化可读可写buffer,设置回调函数。开始循环,等待出现就绪事件,遍历就绪事件,如果是可读的,就接收数据,若是可写的,就写入数据,最后输出数据。

2023-12-15 14:29:41 1709

原创 新手入门socket编程——io多路复用

socket,也就是套接字,它是一种计算机之间进行通信的约定或方式在我的理解里,它是一个封装了TCP/IP以及其他网络协议族中许多函数的接口,例如:listen,accept,recv,send等函数。它通过绑定一个端口和IP地址来进行网络通信。本文我们以在服务端生成一个回声网络通信的代码实现来了解socket网络通信。

2023-12-14 18:29:27 1677 1

空空如也

空空如也

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

TA关注的人

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