我也是一个线程,为什么每天累得像狗一样?

C# OnnxRuntime集成BEN2模型实现桌面端实时人像分割 实时前景分割是计算机视觉领域的基础技术,其核心原理是通过深度学习模型对图像中的前景与背景进行像素级分类。该技术通过卷积神经网络提取特征,生成前景概率掩码,从而实现精准的对象分离。其技术价值在于为各类应用提供了高效、可部署的视觉感知能力,尤其在需要实时交互的场景中至关重要。应用场景广泛覆盖视频会议虚拟背景、直播抠像、互动娱乐及安防监控等。本文聚焦于利用OnnxRuntime推理引擎在C#桌面环境中部署轻量级BEN2分割模型,解决了传统OpenCV方法在复杂场景下边缘处理粗糙的问题,并针对模型集成、多线程优化及 阅读详情

我的编号是0x7954,我以为世界上的人都和我一样,一出生就忙碌个不停,一直忙到世界的毁灭。

我每天与CPU阿甘为伍,忙着读写内存,一刻不得闲,阿甘这傻小子的速度实在是太快,指令周期都是按纳秒计算的,他经常对我说的一句话就是:快点儿,跟上!

我就纳闷了,这程序员都是996,至少有一天可以休息,我这怎么得7*24工作啊,每天累得像狗一样!

不过读写内存这个活是老大分配给我的,我认命。

有一天深夜,工作很少,我终于可以稍微休息一下,和CPU阿甘聊了一会儿,他无意中提起一件事:“这个机器原来安装过一个叫Tomcat的软件,这Tomcat运行起来以后,会启动很多线程,他们的日常工作就是处理各种各样的包裹。”

“还存在这样的世界?有多少线程啊?” 我很惊讶, 为什么老大只安排我一个人干活? 孤零零的。

“没错,Tomcat有个线程池,具体有多少个线程我也不清楚,这些线程在处理包裹的时候,有些就是执行一下简单的业务逻辑代码,马上返回,有些需要访问数据库,有些需要读写文件,有些还要通过网络来访问别的系统,这个时候就可以阻塞休息了, 对了,其中有个叫做0x3074的线程特别出名。”

CPU给我讲了一下0x3704的故事,都在《我是一个线程》当中。

听完后我心情低落,十分委屈,我也是一个线程,人家的生活多么丰富多彩,线程还会阻塞,一伙人可以聚在一起喝茶、聊天、打牌。哪像我,像个驴子一样每时每刻都在转圈拉磨。

“后来Tomcat去哪里了?”  我十分憧憬,幻想着自己也能成为其中的一个线程,和0x3704谈天说地。

“程序员把他们关闭了,然后搬了家,到另外一台机器上启动了,才把这个机器单独留给了你们老大: Redis,现在专门用来缓存数据。你每秒处理上万次的缓存读写请求, 也许就有0x3704发过来的。”

原来如此! 这世界上不止我一个线程,还有很多线程在访问我们Redis缓存。

640?wx_fmt=png

640?wx_fmt=jpeg

我算是明白了老大为什么要我把放到墙内,这一旦了解了外边的花花世界,心就野了,每天带着怨气工作,屡屡出错。

Redis老大看到我状态不佳,赶紧跑来慰问:“0x7954,最近是怎么回事啊!”

我没声好气地说:“为什么只有我一个线程在干活!”

“谁说只有你一个? 做持久化的时候,比如RDB的bgsave,那不是有别的线程在干活嘛!”

“我说的是读写内存中缓存数据的线程!为什么只有我一个? ”看到老大想转移矛盾,我赶紧把他拉回来,“人家Tomcat能弄个线程池,里边很多线程,大家都可以阻塞休息,我们为什么不能这么做?!”

Redis老大听到我这么说,就知道外边的世界无法对我隐藏了, 只好对我解释:“我做出这么一个决定是有原因的,最主要的原因就是我们负责的业务和Tomcat不同!”

老大从怀里掏出一张图,小心翼翼地递给我:“这可是宝贝,别弄坏了:”

640?wx_fmt=jpeg640?wx_fmt=jpeg

看到满纸的英文,我真是后悔为什么不把四级学好。

不过我还是看出了端倪,这CPU阿甘最快,一个时钟周期是0.3纳秒,内存访问需要120纳秒,固态硬盘访问需要50-150微秒,传统硬盘访问需要1-10毫秒, 网络访问最慢,需要几十到上百毫秒。

如果CPU阿甘的一个时钟周期按1秒算,那内存访问就是6分钟,固态硬盘是2-6天,传统硬盘是1-12个月,网络访问就是几年了!

(1秒= 1000毫秒= 1000,000 微秒 = 1000,000,000纳秒)

都是人类制造的电脑设备,这速度差异怎么如此之大! 可是这和我有什么关系?

Redis老大说:“ 我们负责的业务主要是和内存打交道,你每天就是读写内存的那些数据结构,像string ,hash, set, list等等,内存的速度是很快的。我们来假设一个场景, 有10万个请求发给了我们Redis, 假设你10微秒处理一个,那这10万个请求,你1秒内就轻松搞定!但是如果同样多的请求发给Tomcat,它的线程需要读写文件,访问硬盘,甚至网络,速度那是非常非常慢的,假设平均处理时间是10毫秒,你算算需要多长时间?”

我稍加计算,吓了一跳,需要1000秒才能搞定,这实在是太慢了,人类是万万等不及的。

Redis老大说:“所以嘛,那Tomcat肯定要建立一个线程池,里边养一堆线程来干活喽。并且,一个Tomcat还不够,需要多个Tomcat组成集群来分担压力,他是不得已而为之。”

640?wx_fmt=png

640?wx_fmt=jpeg

原来如此,看来业务不同,这工作模式也大为不同啊!  可是不对啊,这么多的网络请求肯定是很慢的啊!

“这个不用你操心,我们是非阻塞的I/O,使用了epoll作为I/O多路复用的实现,我还有一个自己的事件处理模型,不会在网络I/O上浪费时间。 ” Redis老大深思熟虑,早就考虑到了这一点。

“单线程还有一个重要的好处就是,不用给资源加锁,所有的命令都会放到一个队列中,你只要从队列中取出指令,逐个执行就可以了,根本不用考虑锁的问题,非常安全。”

640?wx_fmt=png640?wx_fmt=jpeg

“最后还有一点,由于只有你一个线程,也没有线程切换开销了,你一个人独霸CPU阿甘。”(确切来说,只能用一个CPU 核心)

老大一口气说了这个么多好处,我无语了,资本家真坏,看来我这辈子就是劳累命。

不过不能就这么算了,我还得提出那个关键问题:“我7*24小时工作,也该长点儿工资了!”

“没问题,等到张大胖给我们加了内存,我就给你发双份工资!”

往期精彩回顾

《我是一个线程》

《CPU阿甘》

《TCP/IP之大明邮差》

《Redis:MySQL算老几?》

《MySQL:缓存算什么东西?》

《后端风云》

码农翻身,用故事讲解技术本质, 更多精彩文章,请移步《码农翻身三年文章精华》

VC++ GDI绘图抗锯齿增强组件(含实时渲染示例与完整集成文档) 一套专为Windows原生GDI设计的轻量级抗锯齿增强方案,直接替换或封装LineTo、Ellipse、Polygon等标准绘图函数,在不引入OpenGL、Direct2D或第三方库的前提下,实现边缘柔化渲染。核心采用路径重采样+局部灰度插值算法,兼顾CPU效率与视觉质量,实测在主流双核以上处理器上可稳定支持中等复杂度矢量图形(如带弧度的多边形、密集折线、嵌套椭圆)的近实时绘制。源码基于VC++编写,兼容Visual Studio 2008至VS2022,支持MFC和纯Win32项目无缝接入;提供清晰的调用 阅读详情

相关推荐

解决/usr/lib64/libstdc++.so.6和/lib64/libc.so.6版本过低问题

在CentOS7.0中编译好MySQL5.7.14之后,然后在CentOS6.5中初始化MySQL,执行:/usr/local/mysql/bin/mysqld --version出现如下问题:./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)

poxiaonie的博客 2万+

关于线程退出

main函数就是主线程,线程之间都是平级关系,线程退出pthread_exit()。main函数主线程退出pthread_exit((),不会影响其他线程退出,只有进程退出所有线程都退出。main函数调用return ,会调用调用进程退出函数exit(),这样所有线程都会退出。内核执行程序的唯一方式是exec函数被调用。程序自动终止的唯一方式是_exit或者_Exit被调用,或者程序被动的被信号终...

RichardWeiDong的博客 512

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2289

php中curl_multi的应用

相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_m

oyd的专栏 1万+

EtherCAT主站开发(学习笔记一)

摘要:本文介绍了基于STM32H7的EtherCAT主站开发探索。EtherCAT是一种高实时性工业以太网协议,具有低延迟、高带宽利用率等特点。文章详细解析了EtherCAT的协议架构、帧结构和工作原理,重点阐述了PDO数据传输过程及主从站通信机制。同时介绍了CoE、FoE等应用层协议扩展。作者将基于SOEM开源协议栈进行开发,为后续实际应用中的伺服电机控制奠定基础。

weixin_69388007的博客 1475

Triplet Loss调参实战:Margin选多少?距离函数用哪个?我的模型为什么训不动?

本文深入探讨了Triplet Loss调参中的关键问题,包括margin参数的选择、距离函数的比较以及模型训练不动的常见原因。通过实战案例和技术分析,提供了针对不同场景(如人脸识别、商品图像、文本匹配)的margin黄金区间,并对比了欧式距离与余弦相似度的适用场景。文章还介绍了困难样本挖掘的最新策略和模型诊断的实用清单,帮助开发者高效解决度量学习中的工程难题。

weixin_29050271的博客 411

线程池使用ExecutorService 多线程处理队列任务

最近转到银行工作,在做最核心的财务账务部分,对我来说是一个比较新的东西,工作也已经四年有余,接触一些新的东西,也是不错,每天也累得像狗...,不说了。/捂脸 接下来说一种非常实用的多线程操作模式,此方式能够应对大部分的多线程操作,稍微改一下往里面套就可以满足大部分的业务需求。 基本方式是: 使用ExecutorService 管理多线程,使用Executors创建newFixedThrea

mingjie1212的博客 5239

阻抗匹配与史密斯(Smith)圆图

在找到点B和B'后,我们就能够测量A'到B和B'到D的弧长,前者就是C的归一化电纳值,后者为L的归一化电抗值。当然,表面上看新的点好像是一个不同的阻抗,实际上Z和1/Y表示的是同一个元件(这个新值在圆图上呈现为一个不同的点,而且反射系数也不相同,依次类推)。出现这种情况的原因是我们的图形本身是一个阻抗图,而新的点代表的是一个导纳。这个方程是在复平面(Γr, Γi)上、圆的参数方程(x - a)² + (y - b)² = R²,它以[r/(r + 1), 0]为圆心,半径为1/(1 + r)。

qq_55759599的博客 3962

团队管理之性能实施团队日志4

这些数据罗列都没问题,但是结论是网络连接限制的问题,我觉得这个结论和前面的数据不符,本来以为是还有其他的数据没给到我,问了一下,并没有。性能优化实施项目这件事情,很明显是有价值的,但是在真正的实施团队中,我遇到的是很多人把自己做成了没价值的体现。因为我在回来之前已经跟数据中心的人说了把数据库的可查全部数据的用户创建给我,并且他们是已经答应了的。第一种是技术牛B到了极点,看一眼就知道问题在哪,其实这也是有藤的,只不过藤在心中;通常用到第三招的时候,就是跟客户说,不要测了,测了我也不会给你期望的结果。

7DGroup,让技术更有价值! 1527

基于结构的虚拟筛选模型 gnina 从源码编译

所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~

周迪新的博客 3188

电磁场仿真软件:CST Studio Suite_(25).案例分析与实践

在电磁场仿真中,材料属性的设置至关重要。通过API,您可以轻松地设置和修改材料属性,以适应不同的仿真需求。通过以上案例分析和实践,您已经学会了如何在CST Studio Suite中进行二次开发。自动化仿真流程:批量创建和运行仿真项目、优化设计参数、生成报告。自定义仿真设置:设置材料属性、边界条件和激励源。数据处理与分析:读取仿真结果、数据可视化和数据导出。高级脚本开发:多线程仿真、集成机器学习和云仿真。这些技能将帮助您更高效地进行电磁场仿真,提高设计质量和工作效率。

kkchenjj的博客 1387

【工作经历分享】软件测试求职真的难,但是我还是从7K涨到了14K_软件测试二年的工作经验是不是不好找工作(1)

2020年那会,找工作真的太难了。。。后来还是找到了,就是我上一家公司,电商行业,自研的saas平台。20年5月份入职,还记得入职那会,他们测试就只有一个小姐姐,后来才知道因为项目即将上线,他们才招了我进来。入职第一天,小姐姐直接把一份测试用例、以及原型发给我,让我在两个星期内把用例过完一遍,有问题直接提禅道上。说真的,我一头雾水,他们都没有对我进行培训,就直接让我负责这个新项目的测试了,但我新来的,对这个项目真的不熟悉啊,主流程是什么?不知道。如何业务闭环?不知道。

2401_84563561的博客 749

【深度学习新浪潮】手把手教你不花一分的token钱,纯本地部署openclaw

本地轻量开源AI智能体框架Windows 11 + WSL2 + Ollama + OpenClaw 一键部署零代码配置,直接用上本地模型工具调用未来方向:轻量化、插件化、本地生态成熟如果你喜欢本地AI、厌倦了云端限制、想真正拥有一个“听话又能干”的本地助手,OpenClaw 绝对值得现在就上手玩一玩。

专注:太空算力、AI infra、异构调度、大模型成本工程 2785

有趣的科普

本科普分类的明确,不需要在意分类,时间:2023.8.24。

2301_76556912的博客 259

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【工作经历分享】软件测试求职真的难,但是我还是从7K涨到了14K

上个礼拜刚好转正了,三个月试用期,五月份换的工作。现在这份工作,相比上一份确实好很多,比如工资直接涨了一倍,7到14,13薪,朝九晚六,从不加班,项目也简单,包括我在内测试组一共有7个同事,但是每个人分到的任务真的很少,用自己一句话总结就是上班7.5小时,摸鱼6个钟。。。对,我现在的公司是7.5小时制的,所以才说轻松 说一说上一份工作吧,因为刚换工作没多久,目前这份工作还没什么代表性,上一份我干了2年,可以让我讲很久了。2020年的时候,因为疫情,我毕业后的第一份工作辞掉了,但是找了很久都没找到下一份,我简

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 626

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用CompletableFuture

多线程相关知识 – CompletableFuture public class TestCompletableFuture { public static void main(String[] args) throws InterruptedException { // 交给异步线程执行, CompletableFuture<Double> completableFuture = CompletableFuture.supplyAsync(TestCom

编程牧马人 1394

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

做了4年多软件测试,跳槽2次,我终于干到月薪30k......

我现在的这份工作,比上一份要好很多,首先薪资直接涨了一倍,7到14,13薪,朝九晚六,从不加班,项目也简单,包括我在内测试组一共有6个同事,但是每个人分到的任务真的很少,用一句话总结就是上班7.5小时,摸鱼6个钟。。。我现在的公司是7.5小时制的,所以才说轻松。说下我上一份工作吧,这份工作时间不长没有啥代表性,上一份工作我在那公司带了2年多了。2020年的时候,因为疫情,我毕业后的第一份工作辞掉了,但是找了很久都没找到下一份,我简历写的薪资要求是7-8K,那时候能找到一份7K的就已经不错了。每天投几十份,也

HUA1211的博客 1289

从 C++ 到Objective-C----3

从 C++ 到Objective-C(13):内存管理 new 和 delete Objective-C 中没有 new 和 delete 这两个关键字(new 可以看作是一个函数,也就是 alloc+init)。它们实际是被 alloc 和 release 所取代。 引用计数 内存管理是一个语言很重要的部分。在 C 和 C++ 中,内存块有一次分配,并且要有一次释放。这块内存区可以被任

183

python linux和windows有啥区别_windows和Linux的优缺点

一、就操作系统设计的复杂度上,windows要超过Linux如果windows抛弃人机操作的窗口界面,其性能并不比linux差;编写Web浏览器的难度要远大于编写Web服务器的难度;二、为何大公司喜欢用linux1、免费且开源,相对于免费,开源更加重要;2、开源意味着更安全;3、开源意味着可优化;因为开源所以透明,因为透明,所以安全,但安全是相对的。所谓的安全是针对大公司,是针对那些真正懂linu...

weixin_39804059的博客 2074

Android 从StackTraceElement反观Log库

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。 转载请标明出处: http://blog.youkuaiyun.com/lmj623565791/article/details/52506545; 本文出自:【张鸿洋的博客】 一、概述 大家编写项目的时候,肯定会或多或少的使用Log,尤其是发现bug的时候,会连续在多个类中打印Log信息,当问

Hongyang 1万+

windows和Linux比较

windows和Linux比较

D0126_的博客 1170

三电平有源电力滤波器方案,台达方案。 APF/ SVG 包含设计文档,源码,原理图pdf,PCB文件

台达这套方案最骚的地方在于把传统两电平拓扑升级成了三电平结构,谐波补偿效果直接拉满。不过说实话,刚拿到原理图的时候,我盯着那堆IGBT模块的接法愣是懵逼了五分钟——这中点位电压平衡到底怎么玩?刚开始死活达不到,后来把ADC采样频率从10k提到20k,控制周期从100μs缩到50μs,这才符合要求。三电平比两电平多出27种开关状态,调试时发现有个矢量扇区判断写反了,导致输出电压波形像狗啃的一样。SVG 包含设计文档,源码,原理图pdf,PCB文件,后台和测试流程等文件。三电平有源电力滤波器方案,台达方案。

2508_94201670的博客 242

三电平有源电力滤波器方案:台达方案(包含设计文档、源码等文件)

硬件设计上,主拓扑用了经典的NPC三电平结构。台达这套方案最骚的地方在于把传统两电平拓扑升级成了三电平结构,谐波补偿效果直接拉满。刚开始死活达不到,后来把ADC采样频率从10k提到20k,控制周期从100μs缩到50μs,这才符合要求。三电平比两电平多出27种开关状态,调试时发现有个矢量扇区判断写反了,导致输出电压波形像狗啃的一样。SVG 包含设计文档,源码,原理图pdf,PCB文件,后台和测试流程等文件。SVG 包含设计文档,源码,原理图pdf,PCB文件,后台和测试流程等文件。

oOOpHQYUKG的博客 303
上一篇: 我的大脑越来越喜欢那些碎片化的、不用思考的文章了!
下一篇: 程序员的进化
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值