传统FPM项目怎么渐进式迁移到Swoole/Hyperf?

news2026/5/23 23:43:04
传统 FPM 项目渐进式迁移到 Swoole/Hyperf 完整方案 下面是一份实战派迁移指南,不搞理想化重写,而是一边赚钱一边换引擎。---一、先讲清楚:为啥要迁?要迁到哪?1.1FPM 的痛点-每个请求都要重新加载框架(Laravel 启动30~80ms,Hyperf 启动后0ms)-不能保持长连接(MySQL/Redis 每次重连)-无法做内存级缓存、定时任务、WebSocket、长轮询1.2两条迁移路线对比 ┌───────────────────────────────────┬────────────────┬──────────┬─────────────────┐ │ 路线 │ 工作量 │ 性能提升 │ 风险 │ ├───────────────────────────────────┼────────────────┼──────────┼─────────────────┤ │ FPM → LaravelOctane(Swoole 模式)│ 小,改5%代码 │3~5倍 │ 低,代码几乎不动 │ ├───────────────────────────────────┼────────────────┼──────────┼─────────────────┤ │ FPM → Hyperf 重写 │ 大,改60%代码 │10~20倍 │ 中,但架构干净 │ └───────────────────────────────────┴────────────────┴──────────┴─────────────────┘ 大白话决策树:-业务还在快速迭代、团队人少 → 走 Octane-项目要做大、有微服务需求、QPS 目标过万 → 逐步迁 Hyperf-不要一次性全迁,无论选哪条都要渐进---二、路线 A:Laravel →Octane(渐进、低风险)阶段0:体检(1天)跑一遍单例污染扫描:composer require--dev laravel/octane php artisan octane:install--serverswoole php artisan octane:check # Laravel11自带 手工扫这些坑(关键!):#1.找静态属性 grep-rnstatic \$app/|grep-vfunction#2.找单例存请求状态的 grep-rnapp()-instance\|app()-singletonapp/#3.找 Auth::user()缓存在静态变量里的 grep-rnstatic.*user\|self::\$userapp/阶段1:改造代码(3~7天)1.1静态变量污染(最常见的坑)❌ 错误写法(FPM 没事,Octane 会跨请求泄漏):class CurrentUser{privatestatic?User $usernull;// ← 上个请求的用户被下个请求看到!publicstaticfunctionset(User $u):void{self::$user$u;}publicstaticfunctionget():?User{returnself::$user;}}✅ 正确写法:用容器作用域// app/Providers/AppServiceProvider.phppublic functionregister():void{$this-app-scoped(CurrentUser::class,function(){returnnewCurrentUser();});}scoped()单例,但每个请求结束后自动销毁。Octane 专门为这种场景设计的容器方法,大白话就是请求级单例。1.2单例里别存 Request ❌ 错误:class ReportService{public function__construct(private Request $request){}// 绑死了第一个请求!}$this-app-singleton(ReportService::class);✅ 正确:用 scoped 或每次从容器取 $this-app-scoped(ReportService::class);// 请求级单例// 或者改用 method 注入:public function build(Request $request)1.3配置 Octane 监听器(关键)config/octane.php:listeners[RequestReceived::class[...Octane::prepareApplicationForNextOperation(),...Octane::prepareApplicationForNextRequest(),// 自己的清理逻辑\App\Listeners\FlushApplicationState::class,],RequestTerminated::class[FlushUploadedFiles::class,\App\Listeners\FlushApplicationState::class,],],warm[// 这些单例每次请求开始时自动重建\App\Services\ReportService::class,\Illuminate\Auth\AuthManager::class,],flush[// 这些环境变量 / 配置每次请求清掉],app/Listeners/FlushApplicationState.php:?php namespace App\Listeners;use Illuminate\Support\Facades\DB;class FlushApplicationState{public functionhandle():void{// 清掉自己的全局状态(如果有)\App\Support\CurrentUser::reset();// 防 DB 连接状态泄漏(事务没提交、临时表等)foreach(array_keys(config(database.connections))as $conn){DB::connection($conn)-disconnect();}}}阶段2:本地预发跑通(1周)php artisan octane:start--serverswoole--port8000--workers4--max-requests500压测对比:#FPM 跑ab-n10000-c50http://fpm.local/api/orders#Octane 跑ab-n10000-c50http://octane.local:8000/api/orders通常 QPS 翻3~5倍。 阶段3:灰度上线(2周)关键:同时跑 FPM 和 Octane,Nginx 按权重分流。/etc/nginx/sites-available/myapp.conf:upstream backend{#FPM 占90%流量(走 unix socket)server unix:/var/run/php/php8.2-fpm.sock weight9;#Octane 占10%流量(先观察)server127.0.0.1:8000weight1;}server{listen443ssl http2;server_name api.myapp.com;location/{# 如果是 FPM 请求,走 fastcgiif($upstream_addr~unix:){#...走 fastcgi}proxy_pass http://backend;}}更稳妥的做法:Nginx 按 URL 灰度 location/api/v2/{proxy_pass http://127.0.0.1:8000; # 新接口走 Octane}location/{fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;# 老接口走 FPM}大白话:新写的接口直接 Octane,老接口慢慢迁。 阶段4:全量切换(确认无内存泄漏后)监控指标:-Worker 内存增长曲线(必须平稳)-请求耗时 P99-业务异常率 切完后:-关掉 FPM-Nginx 改成纯 Octane upstream-删掉 FPM 配置---三、路线 B:Laravel → Hyperf 渐进式迁移 核心思想:双写流量切分,不停机 ┌──→ Nginx ──┬──→ 老 Laravel/FPM(80%流量)公网域名 ────────┤ │ └──→ API Gateway ──┬──→ 新 Hyperf 服务(20%流量)└──→ 共享 MySQL/Redis 阶段0:架构对齐(2周)0.1数据库不变,共用-Laravel 和 Hyperf 连同一个 MySQL-两边的 ORM 都用同一张表,模型字段保持一致0.2缓存/Session 改成集中存储-Session 从 file 改成Redis(两边能读同一个 session)-Cache 改成 Redis,key 加版本号防冲突 config/session.php:driverenv(SESSION_DRIVER,redis),connectionsession,Hyperf 这边对应配置:// config/autoload/session.phpreturn[handlerHyperf\Session\Handler\RedisHandler::class,options[connectiondefault,gc_maxlifetime1200,cookie_namePHPSESSID,// ← 跟 Laravel 一致!],];0.3用户认证打通(关键)-JWT 是最简单的方案-Laravel 签发的 JWT,Hyperf 能解开,反之亦然-Secret 和算法两边必须一致.env(两边一样):JWT_SECRET同一个长字符串 JWT_ALGOHS256 阶段1:搭 Hyperf 骨架(1周)composer create-project hyperf/hyperf-skeleton hyperf-app cd hyperf-app composer require hyperf/jwt firebase/php-jwt composer require hyperf/model-cache hyperf/redis 目录约定(和 Laravel 保持类似,降低心智负担):hyperf-app/├── app/│ ├── Controller/← 对标 Laravel app/Http/Controllers │ ├── Service/← 业务逻辑 │ ├── Model/← 对标 Laravel app/Models,字段和 Laravel 完全一致 │ ├── Middleware/│ └── Exception/├── config/└── bin/hyperf.php Model 直接抄 Laravel 的字段:// Laravel: app/Models/Order.phpclass Order extends Model{protected $tableorders;protected $fillable[user_id,amount,status];}// Hyperf: app/Model/Order.phpclass Order extends \Hyperf\DbConnection\Model\Model{protected?string $tableorders;protected array $fillable[user_id,amount,status];}接口契约严格一致:同一个 URL 在 FPM 和 Hyperf 上返回的 JSON 完全一样。 阶段2:按接口迁移(每周迁1~3个)2.1选迁移顺序的原则 按高 QPS 低耦合优先:┌──────────────┬────────┬────────────────────┐ │ 类型 │ 优先级 │ 例子 │ ├──────────────┼────────┼────────────────────┤ │ 只读高频接口 │ ★★★★★ │ 商品列表、文章详情 │ ├──────────────┼────────┼────────────────────┤ │ 简单 CRUD │ ★★★★ │ 评论、点赞 │ ├──────────────┼────────┼────────────────────┤ │ 长连接需求 │ ★★★★★ │ WebSocket、SSE │ ├──────────────┼────────┼────────────────────┤ │ 复杂业务 │ ★ │ 下单、支付(最后迁)│ ├──────────────┼────────┼────────────────────┤ │ 后台管理 │ 不迁 │ 留 FPM 就行 │ └──────────────┴────────┴────────────────────┘2.2Nginx 路由切分(核心配置)upstream laravel_fpm{server unix:/var/run/php/php8.2-fpm.sock;}upstream hyperf_app{server127.0.0.1:9501;keepalive32;# 长连接复用}server{listen443ssl http2;server_name api.myapp.com;# 已迁移的接口走 Hyperf location/api/products{proxy_pass http://hyperf_app;proxy_http_version1.1;proxy_set_header Connection;}location~^/api/products/[0-9]${proxy_pass http://hyperf_app;}location/ws{proxy_pass http://hyperf_app;proxy_http_version1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connectionupgrade;proxy_read_timeout86400;}# 其余全部 Laravel location/{try_files $uri/index.php?$query_string;}location~\.php${fastcgi_pass laravel_fpm;include fastcgi_params;}}2.3灰度发布单个接口 第1步:Hyperf 实现接口// app/Controller/ProductController.php#[Controller(prefix:/api)]class ProductController{#[Inject]protected ProductService $service;#[GetMapping(/products)]public functionindex(RequestInterface $request):array{return[code0,data$this-service-list(page:(int)$request-input(page,1),size:(int)$request-input(size,20),),];}}第2步:返回结果对比工具(自动校验两边一致)写一个临时中间件,同时打 FPM 和 Hyperf,比对结果:// 跑在压测机上,不上生产class DualCallChecker{public functioncheck(string $path):array{$aHttp::get(http://fpm.internal{$path})-json();$bHttp::get(http://hyperf.internal{$path})-json();if(json_encode($a)!json_encode($b)){Log::error(mismatch,[path$path,fpm$a,hyperf$b]);return[okfalse];}return[oktrue];}}第3步:Nginx 灰度1%split_clients${remote_addr}${request_uri}$backend{1%hyperf_app;*laravel_fpm;}location/api/products{proxy_pass http://$backend;}观察1天 →5%→20%→50%→100%。2.4共享代码怎么办?老项目里有 app/Helpers.php、app/Services/PaymentService.php,Hyperf 怎么复用?三种方式:1.简单工具函数:复制粘贴一份到 Hyperf,几十行不疼2.复杂业务逻辑:抽成 HTTP 微服务,FPM 和 Hyperf 都调3.超复杂的(支付、计费):暂时不迁,Hyperf 调 FPM 的接口// Hyperf 调老 Laravel 的支付接口$result$this-httpClient-post(http://fpm.internal/api/pay,[json[order_id$id,amount$amount],]);大白话:别一上来就把所有代码搬过去,先打通流量,业务慢慢拆。 阶段3:数据一致性兜底3.1缓存 key 命名空间隔离// Laravel: cache:laravel:user:1001// Hyperf: cache:hyperf:user:1001// 共享数据: cache:shared:product:423.2数据库迁移谁来管?约定:DDL(建表改表)只在 Laravel 这边跑,Hyperf 只读结构、不发起 migration。否则两边的 migration 历史会打架。#Laravelphp artisan migrate#Hyperf 不跑 migration,只跑业务3.3模型监听器(observer)Laravel 的 Order::saved 监听器,在 FPM 写订单时触发,但 Hyperf 写订单时不会触发(它根本不知道你写了 Laravel 的监听器)。 解决:重要的写后逻辑改成事件队列// Laravel 和 Hyperf 都往同一个 Redis 队列发事件Redis::lpush(events:order:created,json_encode($order));// 起一个独立的 worker 消费(放哪边都行)阶段4:WebSocket/定时任务迁过去(Hyperf 强项)4.1WebSocket-原本 LaravelPusher/Soketi 的方案,直接换成 Hyperf 自带的 WebSocket Server-推送消息时,Laravel 往 Redis 发,Hyperf 订阅推送给客户端// Laravel 端Redis::publish(user.1001.notice,json_encode([msghello]));// Hyperf 端订阅 Redis → 推 WebSocket4.2定时任务-Laravel 的 schedule:run 是 FPM,每分钟启动一次,启动开销大-Hyperf 的 Crontab 常驻内存,秒级精度,零启动开销-任务一个一个迁过去 阶段5:Laravel 萎缩到只剩老接口→ 最终下线 迁移到70%后,Laravel 这边只剩:-老的后台管理-几个复杂的支付/账单接口-离线脚本 这时再决定:-留着也行(后台管理对 QPS 没要求)-想全干掉就再花1~2个月把支付迁完---四、迁移期监控清单(必做)┌─────────────────┬────────────────────────────┬──────────────────────────┐ │ 监控项 │ 工具 │ 告警阈值 │ ├─────────────────┼────────────────────────────┼──────────────────────────┤ │ 两边响应一致率 │ 自研对比脚本 │99.9%告警 │ ├─────────────────┼────────────────────────────┼──────────────────────────┤ │ Worker 内存增长 │ Prometheusnode_exporter │1小时涨100M │ ├─────────────────┼────────────────────────────┼──────────────────────────┤ │ 请求 P99 │APM(Sentry/SkyWalking)│ 比 FPM 慢就回滚 │ ├─────────────────┼────────────────────────────┼──────────────────────────┤ │ Redis 连接数 │ RedisInsight │ 突增50%│ ├─────────────────┼────────────────────────────┼──────────────────────────┤ │ MySQL 连接数 │ MySQL Exporter │ 接近 max_connections80%│ ├─────────────────┼────────────────────────────┼──────────────────────────┤ │ 业务异常率 │ 日志聚合 │ 同比0.1%立即查 │ └─────────────────┴────────────────────────────┴──────────────────────────┘---五、回滚预案(必须有)任何阶段都要能1分钟回滚:# 灰度阶段:改 Nginx 配置 sed-is/1% hyperf_app/0% hyperf_app//etc/nginx/conf.d/myapp.conf nginx-s reload # 流量瞬间全回 FPM # 全量阶段:DNS/SLB 切回老入口 # 提前留一个完整 FPM 环境别拆,至少留1个月---六、常见踩坑清单 ┌───────────────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────┐ │ 坑 │ 路线 │ 解决 │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ 静态变量跨请求泄漏 │ Octane/Hyperf │ 用容器 scoped,禁用static存状态 │ │ │ 都有 │ │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ MySQL 连接 MySQL server has gone │ 两边都有 │ 开心跳/连接池 max_idle_time │ │ away │ │ │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ Session 在两边不通 │ 路线 B │ 改 Redis sessioncookie 名一致 │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ Auth::user()拿不到 │ 路线 B │ 改成 JWT,两边共用 secret │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ Carbon::now()在 Octane 被冻结 │ 路线 A │ 用 Date::createFromMutable(now()-toDateTime())或每次 │ │ │ │ new │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ 容器单例污染 │ 路线 A │ singleton 改 scoped │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ Hyperf 模型缓存和 Laravel 不一致 │ 路线 B │ 缓存 key 加 namespace,或关闭一边的缓存 │ ├───────────────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤ │ 文件上传后路径不对 │ 路线 A │ Octane 下 $_FILES 已废弃,用 $request-file()│ └───────────────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────┘---七、时间线参考(中型项目)┌────────────┬────────────────┬────────────────┐ │ 阶段 │ 路线A(Octane)│ 路线B(Hyperf)│ ├────────────┼────────────────┼────────────────┤ │ 体检改造 │1周 │2周 │ ├────────────┼────────────────┼────────────────┤ │ 灰度上线 │1~2周 │1个月 │ ├────────────┼────────────────┼────────────────┤ │ 全量切换 │2周 │3~6个月 │ ├────────────┼────────────────┼────────────────┤ │ 回收老环境 │1周 │1个月 │ ├────────────┼────────────────┼────────────────┤ │ 合计 │1~2个月 │ 半年 │ └────────────┴────────────────┴────────────────┘---八、一句话总结 ▎ 不要重写,要替换。 一边赚钱一边换引擎:▎-流量层用 Nginx 切分 ▎-数据层共享 MySQL/Redis ▎-认证用 JWT 打通 ▎-一个接口一个接口迁,有问题随时回滚 ▎ ▎ 想省事选 Octane,想做大选 Hyperf,别犹豫别贪多。---要不要我再展开:-Octane 改造完整 checklist自动扫描脚本-Hyperf 端 JWT 共享 Laravel session 的完整代码-双跑校验工具(自动对比 FPM 和 Hyperf 接口返回)-Nginx 灰度配置进阶(按用户 ID、按 header 灰度)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2639195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…