为什么 Chromium 如此推崇异步非阻塞?——彻底搞懂同步、异步、阻塞、非阻塞

Linux Swap 子系统:架构、内存管理与虚拟化 Swap Linux Swap机制通过将不活跃内存页移至磁盘或压缩内存,扩展系统有效内存容量,缓解内存压力。传统架构中,逻辑Swap槽与物理存储绑定,导致资源浪费,尤其在使用Zswap等压缩技术时。为此,Vswap与Xswap提出虚拟化方案:前者以XArray实现灵活映射,支持多后端迁移;后者采用稀疏映射,简化管理但容量固定。二者在架构设计、资源记账与动态扩展上各有权衡,反映了内核开发中对性能、可维护性与灵活性的深层考量。 阅读详情

摘要

很多人学习网络编程时,都会遇到四个概念:

  • 同步(Synchronous)
  • 异步(Asynchronous)
  • 阻塞(Blocking)
  • 非阻塞(Non-blocking)

但真正理解的人却不多。

很多人把同步等同于阻塞,把异步等同于非阻塞。

事实上,它们根本不是一个维度。

本文将结合生活中的例子以及 Chromium 的源码设计,彻底讲明白这四者之间的关系。


一、为什么很多人会混淆?

很多教程一开始就画这样一张图:

同步
异步

阻塞
非阻塞

然后开始讲 API。

例如:

select()

epoll()

IOCP()

结果。

新人越来越迷糊。

其实原因很简单。

因为:

同步/异步

讨论的是:

结果是谁通知你的。

而:

阻塞/非阻塞

讨论的是:

等待期间,你能不能继续做别的事情。

它们描述的是两个完全不同的问题。


二、同步与异步:谁来通知结果?

这是第一个维度。

只有一句话。

同步:自己主动获取结果。

异步:别人主动通知结果。

注意。

这里和线程是否等待。

没有任何关系。


举个餐厅的例子。

你点了一碗牛肉面。

老板开始做。

第一种情况。

你每隔一分钟问一次:

老板,好了吗?

老板:

没有。

一分钟后。

你继续问。

老板,好了吗?

老板:

还没有。

整个过程。

结果是谁拿到的?

答案:

你自己不停去问。

这就是:

同步。


第二种情况。

老板说:

做好了我喊你。

你什么都不用问。

做好以后。

老板:

23号!

牛肉面好了!

结果是谁通知你的?

老板。

这就是:

异步。

所以。

同步异步。

只看一句话。

到底是谁主动告诉你结果。


三、阻塞与非阻塞:等待的时候在干什么?

这是第二个维度。

同样只有一句话。

阻塞:等待期间什么也做不了。

非阻塞:等待期间还能继续工作。

例如。

还是餐厅。

老板说:

站这等。

于是。

五分钟。

你一直站在那里。

不能走。

不能聊天。

不能玩手机。

这就是:

阻塞。


另一种情况。

老板说:

做好了自己来看。

于是。

你:

出去买奶茶

↓

回来问

↓

没好

↓

继续逛

↓

回来问

虽然。

结果还是:

自己问。

但是。

整个等待期间。

你一直在干别的事情。

这就是:

非阻塞。


四、四种组合

到这里。

其实已经可以组合出来四种情况。


第一种:同步阻塞

这是最经典的一种。

例如。

老板:

做好之前。

站这。

于是。

点餐

↓

等待

↓

拿面

↓

结束

整个过程。

既是:

自己拿结果。

又:

一直等待。

程序中。

例如:

ReadFile();

printf("继续执行");

ReadFile没有返回。

下面所有代码。

全部停止。


第二种:同步非阻塞

老板:

做好了自己来看。

于是。

你:

问一下

↓

没有

↓

出去逛

↓

回来问

↓

没有

↓

继续问

整个过程。

结果:

仍然是:

自己获取。

所以:

同步。

但是。

等待期间。

一直可以干别的。

因此:

非阻塞。

Linux Socket:

设置:

O_NONBLOCK

就是这种思想。


第三种:异步阻塞

很多人认为。

异步一定非阻塞。

其实不是。

例如。

老板:

做好了我喊你。

于是。

你:

一直坐门口。

等老板喊。

整个过程中。

老板负责通知。

所以:

异步。

但是。

你:

一直坐着。

不能干别的。

所以:

阻塞。

例如。

很多线程同步代码:

future.wait();

或者:

WaitableEvent.Wait();

线程:

一直睡眠。

等别人通知。


第四种:异步非阻塞

这是现代服务器最喜欢的方式。

老板:

做好以后。

微信通知。

于是。

你:

点餐

↓

出去购物

↓

喝咖啡

↓

老板发微信

↓

回来拿面

整个过程中。

老板:

负责通知。

你:

一直可以做自己的事情。

程序里:

例如:

ReadFileAsync();

继续执行其它代码;

......

完成以后:

Callback();

或者

async/await

IOCP

epoll

libuv

Node.js

都属于这一类。


五、一张图彻底记住


                    谁通知结果?

                自己问            别人通知
              (同步)             (异步)
────────────────────────────────────────
一直等待      同步阻塞        异步阻塞
(阻塞)

────────────────────────────────────────

继续干活      同步非阻塞      异步非阻塞
(非阻塞)

很多人看到这里。

突然就理解了。

因为:

同步异步。

讨论的是:

通知方式。

阻塞非阻塞。

讨论的是:

等待状态。

两个维度。

互不影响。


六、Chromium 为什么大量采用异步非阻塞?

理解完四种模式。

再来看 Chromium。

很多设计突然就合理了。

例如。

UI Thread。

如果执行:

ReadFile();

等待磁盘。

整个浏览器:

卡住。

用户:

不能点击。

不能输入。

不能滚动。

这就是:

同步阻塞。

Chrome几乎禁止。


真正的代码。

更像这样。

base::ThreadPool::PostTaskAndReply(
    FROM_HERE,
    base::BindOnce(&ReadFile),
    base::BindOnce(&OnReadFinished));

流程如下。

UI Thread

↓

PostTask()

↓

立即返回

↓

继续响应用户操作

↓

后台线程读取文件

↓

读取完成

↓

Reply()

↓

UI更新界面

注意。

整个过程中。

UI线程:

从未等待。

读取完成以后。

后台线程:

主动通知。

因此。

这就是:

异步非阻塞。


七、为什么现代高性能框架都选择异步非阻塞?

无论是:

  • Chromium
  • Node.js
  • Nginx
  • libuv
  • Boost.Asio
  • Windows IOCP
  • Linux epoll

它们最终追求的目标。

其实只有一句话。

不要让 CPU 在等待中浪费时间。

真正昂贵的。

不是计算。

而是:

等待磁盘

等待网络

等待数据库

等待GPU

等待用户

如果线程一直阻塞。

CPU就在睡觉。

现代系统希望的是。

当一个任务等待IO的时候。

CPU立即去执行另一个任务。

IO完成以后。

系统再通知它回来。

这样。

CPU几乎一直处于工作状态。

吞吐量自然也就上去了。


八、总结

很多初学者把同步等同于阻塞,把异步等同于非阻塞,这是一个非常常见的误区。

实际上,这两组概念描述的是完全不同的两个维度:

  • 同步还是异步,取决于谁负责获取结果。 自己主动查询是同步,对方完成后主动通知是异步。
  • 阻塞还是非阻塞,取决于等待期间线程是否还能继续执行其他任务。 什么都做不了是阻塞,可以继续处理其他工作就是非阻塞。

理解了这两个维度,再去阅读 Chromium 的 PostTask()、ThreadPool、Sequence、WaitableEvent,以及 Linux 的 epoll、Windows 的 IOCP,你会发现它们虽然实现方式不同,但都围绕着同一个目标展开:

把等待交给系统,把 CPU 留给真正有价值的工作。

这也是为什么现代浏览器、服务器和高性能网络框架,越来越倾向于采用异步非阻塞的架构设计。

10、现代统计方法:趋势面分析、薄板样条与广义线性模型 本文系统介绍了空间预测建模中的三种现代统计方法:趋势面分析(TSA)、薄板样条(TPS)和广义线性模型(GLM)。详细阐述了每种方法的原理、实现步骤、参数优化与预测评估,并结合R语言代码示例展示了在实际数据中的应用。文章还提供了方法对比流程图与土壤湿度预测案例,帮助读者根据数据特征选择合适模型,提升空间预测的准确性与可靠性。 阅读详情

相关推荐

deepseek本地部署及应用部署指南

如果你找到的日志是[send] via NET/IB/0,则表示网络通信是通过IB网络的,但是没有开启GDRDMA技术,则会有大致5%的性能损耗(网传,未实测)。新增的环境变量配置,主要用于启用IB网络通信,而非使用以太网进行通信,详细的每一个参数的具体含义,可以在英伟达NCCL的官方网站上找到说明。下一步,我会对已经完成部署的模型进行压测,来探索系统的性能极限在哪里,以及如何在生产环境中何如进行进一步的性能优化,期待你的关注。

weixin_39797121的博客 2623

高危工业场景人员定位系统设计:四类场景的架构选型与部署要点

本文由航飞光电一线工程团队整理,重点讨论高危工业场景下人员定位系统的架构选型思路。覆盖危化、矿山、港口、电力四类场景,拆解技术路线分工、融合引擎跨区切换实现,以及私有化/本地化部署中的工程难点,供架构师与技术负责人参考。

HF17513371855的博客 339

Vivado项目开发新思路:用VSCode写代码,用Vivado管理IP核与综合(Windows/Mac环境通用指南)

本文介绍了如何结合Vivado和VSCode的优势,打造高效的FPGA设计工作流。通过配置VSCode的Verilog插件和Vivado环境集成,开发者可以在VSCode中编写代码,同时利用Vivado管理IP核与综合,显著提升开发效率和团队协作体验。

weixin_42545503的博客 336

热管理系列之八:终局判断 - 浸没式冷却、混合架构与技术路线图

动力电池热管理三条路径的终局判断:液冷极致优化守住基盘,直冷在中高端渗透,浸没式冷却从概念到量产。附2026-2030技术路线图与关键产业信号分析。

weixin_54917114的博客 1105

基于Super-Jacoco的精准测试实践之路

灵魂拷问这个版本的影响范围到底有多大?研发改动了代码,为什么不通知测试?测试用例真的全面覆盖了吗?测试同学的测试覆盖情况该怎么评估?什么是精准测试概念借助技术手段、通过辅助算法对软件测试过...

咻咻ing的专栏 5837

QGis二次开发 —— 5.1、基于qgis开发雷达扫描、无人机飞行跟踪等(附:源码及工程)

基于qgis开发雷达扫描、无人机飞行跟踪等

322

【STM32】 ADC 完全指南:从模拟信号采样量化到五大架构原理

本文系统介绍ADC核心概念与五大主流架构。模拟信号具时间与幅值连续性,需经采样(满足奈奎斯特准则防混叠)、量化(引入±1/2LSB误差,SNR≈6.02N+1.76dB)、编码三步转为数字信号。重点解析Flash(并行高速但受限于比较器数量)、SAR(逐次逼近,低功耗适合MCU如STM32)、双积分(高精度抗工频,用于万用表)、流水线(高速吞吐)及Σ-Δ(高分辨率,靠过采样与噪声整形)五类架构原理、优缺点与应用场景。强调分辨率≠精度,选型本质是速度、精度、功耗与面积的权衡。

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 424

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。

jasonj333 1158

零信任架构实战:基于天远运营商三要素详版V即时版构建自动化线上授信身份核验网关

破解线上信贷身份核验痛点:从离散证件图片审查到运营商三要素详版数据穿透直连 在互联网消费金融、小额循环信用贷款以及各类纯线上数字化授信平台的业务演进过程中,移动端进件的身份真实性校验是构筑整体合规风控体系的第一道关键屏障。随着移动互联网的高度普及,个人信贷申请全面向移动端 App、微信小程序以及轻量级 Web 门户迁移,“秒级审批、免抵押、纯线上放款”成为了

2501_94041864的博客 152

32、运算放大器的工作原理与应用

本文详细介绍了运算放大器的工作原理与多种应用场景,涵盖开环与闭环放大器的基本概念、理想运算放大器的特性及其‘黄金规则’。文章深入解析了反相放大器、同相放大器、单位增益跟随器与反相器的配置和增益计算,并探讨了电压比较器及窗口比较器的工作机制。同时提供了运算放大器在实际应用中的选型流程、使用注意事项以及常见故障排查方法,帮助读者全面掌握运算放大器的设计与应用要点。

u5v6w7的博客 160

第4-4课:状态压缩与动态规划

什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可...

oRbIt 的专栏 700

AI高密度算力推动冷却架构升级,全球数据中心高功率CDU市场CAGR达23.0%

QYResearch调研显示,2025年全球数据中心高功率CDU市场规模大约为2.04亿美元,预计2032年将达到9.97亿美元,2026-2032期间年复合增长率(CAGR)为23.0%。未来几年,本行业具有很大不确定性,本文的2026-2032年的预测数据是基于过去几年的历史发展、行业专家观点、以及本文分析师观点,综合给出的预测。

QYR_11的博客 187

华为OD机试双机位C卷-虚拟文件系统(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【虚拟文件系统】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【虚拟文件系统】。

qq_45776114的博客 476

数据不出域的 AI 分析方案如何选:企业 Data Agent 的三种部署架构与采购评估

选 Data Agent 翻车,表面看是功能不匹配,根子上是把部署架构当成了采购清单末尾的一个勾选项。拆开来看,有三个具体的翻车点。一是先被 SaaS 的体验打动,再回头找私有化,结果发现根本没有。很多 Data Agent 产品为了快速起量,只提供云服务。团队在公网环境里试用得很顺手,到了要落地的环节才发现,私有化版本要么不存在,要么是另一个定价体系、另一个功能子集。二是以为私有化只是把软件搬进内网,忽略了资产和权限的迁移成本。

Leo的博客 180

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RDIMM、LRDIMM、UDIMM深度对比:寄存器架构、容量上限与平台适配

UDIMM、RDIMM与LRDIMM虽外形相同,但电气架构差异决定其性能与容量上限。UDIMM无缓冲,延迟低但容量受限;RDIMM通过RCD缓冲命令/地址,提升容量;LRDIMM进一步用数据缓冲器(DB)全链路减负,实现超大容量。三者互不兼容,平台适配严格,选型必须“平台先行”,类型错误无法通过降频或混插弥补。核心逻辑:先确认平台支持类型,再优化容量与频率,类型正确才是性能发挥的前提。

JGTX2706的博客 241

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

智能体架构之争:单Agent加Skills,还是多加几个Agent

Anthropic主张“一个Agent+Skills”取代多子智能体,以减少上下文丢失与成本;DeepSeek则提出“双层超智能体”架构,实现跨任务并行、主动响应。二者不矛盾:前者优化单任务内效率,后者突破多任务并发瓶颈。核心共识是:架构应由任务形态决定,而非组织或会话边界。未来关键在于量化拆分标准与防止Skills泛滥。

weixin_44592002的博客 246

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

蓝牙之通信架构

从应用、主机和控制器的分工入手,讲清 HCI、GAP、GATT、ATT、L2CAP 与安全协议如何配合,并通过一次温度读取理解蓝牙数据的完整传递过程。

2601_96393911的博客 205

Flux 架构:一个单向数据流库是怎么跑起来的

状态只有一份 + 数据单向流 + reducer 是纯函数 + 中间件链可组合 + 视图层声明式绑定。这 30 行就是这套思想的最小完整样本:两次useStore订阅、一次拿链式 dispatch、四个按钮对应四种 action(其中一种是 thunk 形态)。

sun_weitao的博客 104

《PCIe + BRAM架构(一):直接把DDR换成BRAM,只有读带宽没变》

本系列用同一块 XC7K325T 板卡、同一条 XDMA 通路,对比四种 PCIe 数据搬运架构:DDR 大缓存、Streaming、BRAM 轻缓存、多通道。本篇讲第三种:BRAM 架构。上一篇《PCIe + DDR架构(二):实测——更改上位机数据处理方式,带宽从1051.4 MB/s 涨到 1926.3 MB/s》

weixin_44017370的博客 331

区县外卖跑腿系统搭建:四端架构、订单链路与验收

区县同城配送系统先定业务边界和交付方式,再用四端跑通订单、支付、配送与结算,最后用真实订单验收。微订公开资料列有多种交付方式、多商户与跑腿业务范围,可作为候选方案,版本和报价以演示确认为准。

weixin_51117207的博客 101

从事件风暴到因果收敛:Mopheus多智能体协同事件触发架构与防循环实践

在构建生产级多智能体协同引擎的过程中,我们总结了三条核心工程准则:1.不可变因果链优于事后关系反查在高度并发且异步的多智能体网络中,因果关系的追溯绝不能依赖事后查库反查关联;将只增的因果祖先链显式封装在事件载荷与任务上下文中,以O(1)的内存检查实现确定性极高的闭环防范。2.生产端纯粹广播与消费端前置极速过滤是高吞吐的基石遵循严格的Pub/Sub模式,让核心业务实体与下游智能体编排解耦;通过调度层内存条件字典求值(conditions),在纳秒级内过滤掉99%的无关事件,保障零业务侵入与极高的系统吞吐。

weixin_54551388的博客 237

IoT架构实战:基于毫米波雷达与边缘计算的公厕异常滞留预警系统设计

该方案有效解决了隐私保护与安全监管的矛盾。通过边缘计算将算力下沉,既降低了主干网带宽成本,又保障了极端网络环境下的报警可靠性,是智慧市政物联网落地的优秀实践。

sxyxhwl的博客 115

政企AI会议纪要系统如何实现内网部署?从语音转写到智能纪要的完整架构

在私有化部署模式下,这些模块可以运行在单位内部的服务器或AI一体机上,通过内部服务接口完成数据交换。

shxjnpl的博客 162

SD-WAN落地提速,企业广域网架构正在发生哪些变化

过去十年,企业广域网建设长期依赖传统专线与静态路由,但在云服务、移动办公和视频会议成为常态的2026年,这种架构的局限性愈发突出:专线开通周期长、带宽费用高、流量绕行云平台导致访问体验下降,以及分支安全能力分散,都拖慢了业务响应速度。IDC公开报告显示,2022年全球SD-WAN基础设施市场收入约为45亿美元,同比增长25.9%。这一增速背后,反映的是企业广域网从“不得不改”到“主动重构”的转变。SD-WAN通过转控分离、集中编排和应用感知路由,将广域网的灵活性、可见性与成本效率提升到了新的水平。

2603_95440980的博客 196

移动收费怎么做?手持终端+App+收费中心的架构实践

关键词:应急收费 · 移动架构 · 收费不中断收费站一旦设备坏了或网络断了,固定车道收费就歇菜。传统应对靠人工发卡、手工记账,效率低还容易对账混乱。本文从架构角度,聊一套"手持终端 + 业务 App + 收费中心"的移动收费方案,也是我们做应急收费终端时的设计思路。

weixin_53898122的博客 221

Animal Portal 东华动物网 · 架构与运行说明

Animal Portal 将 JSP+JDBC 考试项目重构为 Spring Boot 3.3.5 标准三层 MVC 应用。采用 Spring Data JPA 与 Thymeleaf 模板,引入 Spring Security 6 实现 BCrypt 加密与 CSRF 防护。MySQL 8 存储,支持环境变量配置与一键启动。前端自研设计系统无 CDN 依赖,内置 10 个集成测试。

howard2005的专栏 293
上一篇: 为什么 Chromium 正在远离锁?——从一个转账例子理解锁最大的缺陷
下一篇: Content API 深度解析:Chromium 浏览器内核的契约边界
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ปรัชญา แค้วคำมูล

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值