一、引言 当一个多线程程序在测试环境中偶尔出现“偶发卡死”时,很多人的第一反应是怀疑CPU、怀疑库、怀疑系统调用,实际上最常见的罪魁祸首是死锁。死锁的症状是几个线程互相等待,谁也走不下去,整个进程看起来像是挂起来了,但CPU占用可能不高。要理解死锁,就要把“线程-锁-资源”看成一个图。线程拿着一些资源,又在等待另一些资源,如果这张图里出现了一个环,…
一、引言 开线程本身并不难,难的是在线程之间安全地共享数据。如果一个进程里开了十几个线程,每个线程只做完全独立的计算,不读不写共享内存,那根本不需要任何同步原语,甚至单纯用函数参数和局部变量就够了。然而现实中的应用几乎不可能这么理想,你总要维护一些共享状态:请求队列、连接表、缓存、统计计数器等。一旦多个线程对同一个内存位置进行读写,问题就来了。如果…
一、引言 很多C++程序员第一次写多线程代码时,都有类似的感受:std::thread t(f);这一行一写完,好像凭空多出一条执行线,程序自然而然就开始并行跑了。如果只停留在这个层面,你很难自觉地判断自己在做什么,譬如到底开了多少线程、这些线程在哪里跑、什么时候结束、资源谁来回收,以及它们和锁、条件变量之间到底是什么关系。要把多线程系统写稳定,就…
在很多的桌面应用里,网络I/O往往只是“传个文件、调个接口”,延迟几百毫秒无伤大雅。但一旦进入实时场景,比如屏幕投射、语言通话、行情推送、多人协作编辑,网络链路里任何一个小小的等待、过大的缓冲区,都会被用户直接感觉出卡顿。Qt提供的QTcpSocket足够强大,但如果只是照着文档“连一下就完事”,通常得不到理想的实时效果。本文就借一个可复现的小案例…
今天发现我有一台百度云服务器莫名奇妙的卡住了,一看原因是内存不足了。查了下内存不足的原因,有一个叫做heyeAgent的程序占用了不少的内存. 后来一查,heyeAgent,全名hosteye,是百度云给服务器安装的一个服务器杀毒软件,地址:https://cloud.baidu.com/doc/HOSTEYE/index.html 官方的卸载文档…
火狐在某一个版本更新之后,出现了这个AI对话按钮,当我们选中一些文本的时候,这个按钮就会弹出,但是这个按钮有时候会挡住我们需要的其他的功能(比如我用的划词翻译)。这篇文章就是介绍下如何通过about:cofig关闭这个Firefox的AI悬浮按钮 操作方案 在地址栏前往about:config,搜索下面的配置项 browser.ml.chat.en…
前言 我现在要部署的一个程序,需要使用postgres并且需要使用PgVector组件。而宝塔面板安装的postgres默认是没有(且无法自动化的)安装PgVector插件。这篇文章介绍下如何给宝塔面板部署的postgres安装PgVector插件(本文基于ubuntu,当然在Debian系列系统下操作相同),下面的命令均是使用root权限执行的。…
前言 本文转载https://linux.do/t/topic/261672这个帖子,并在该帖子的说明上上做出了相关的修改。 一开始我部署了一个newapi服务器,用于路由各种各样的ai请求,到了后面发现一开始使用的sqllite部署方案有诸多缺点,所以便想要将newapi的sqlite数据库迁移到部署的postgresql上面。本文使用的是宝塔一…
有时候Ubuntu官方的镜像源速度不佳,所以我们需要手动对镜像源进行修改。我这边写了两个简单的Bash小脚本,一键将Ubuntu的官方镜像源自动替换为阿里源。两个脚本分别适配于Ubuntu24.04之后的以及Ubuntu 23.10之前的。(Ubuntu在24.04版本之后,配置文件的格式和位置发生了变化,所以需要两个不一样的脚本) 注意:使用本脚…
本文记录了一下我在WINDOWS10上安装WSL2的记录 首先一管理员权限打开命令提示符(如下图),Wsl2的安装是需要管理员权限的 在终端中输入 wsl --list --online 查找可安装的Linux系统的列表,如下图 提示:如果执行wsl --list --online,报错误 错误: 0x80072ee2 我这次安装报这个错误是由于网…