新闻详情

新闻详情

首页 / 资讯中心 / 详情

进程状态模型:三态、五态、七态的实战解析与诊断

发布时间:2026/9/30 8:11:53来源:尧图网络
进程状态模型:三态、五态、七态的实战解析与诊断
1. 进程状态模型不是教科书里的死概念而是操作系统调度的“实时心跳图”你有没有遇到过这样的场景打开任务管理器看到某个程序明明没窗口、没响应却死死占着20%的CPU和1.2GB内存或者在Linux终端敲ps aux发现一堆状态栏写着S、R、Z、D的进程像一串看不懂的密码又或者调试Java服务时jstack输出里反复出现BLOCKED、WAITING、TIMED_WAITING——这些符号背后根本不是抽象术语而是操作系统正在对每个进程做实时“体检”的结果。进程状态模型就是这套体检系统的标准报告单。它既不是计算机系期末考试里背诵的三态五态七态口诀也不是教材里静态的圆圈箭头图而是一套动态、精确、毫秒级更新的运行时快照机制。三态就绪、运行、阻塞是它的最小可行单元五态增加新建、终止是生产环境的实用版本七态再拆分就绪为活跃/静止、阻塞为活跃/静止则是大型系统应对内存压力与I/O瓶颈的精细化调控策略。我带团队做过三年高并发交易系统运维最深的体会是看懂状态码比杀进程快十倍理解状态流转比查日志准八成。比如wechatappex.exe进程异常增多表面是微信客户端问题实则可能是其子进程在BLOCKED状态卡死导致父进程不断fork新实例sangforpwex.exe拒绝关闭往往因为处于D不可中断睡眠态正等待底层存储设备响应强行kill只会让系统更乱。这篇文章不讲定义复述只讲我在银行核心系统、云原生平台、嵌入式设备上亲手调过的每一个状态节点——为什么必须有这三类模型每种状态切换的真实开销是多少R态进程突然变S态背后可能藏着SSD固件bugZ态进程清不掉八成是父进程没调用wait()回收。如果你常被“请先结束占用进程”提示困扰或想真正看懂top命令里那行%Cpu(s): 12.3 us, 3.4 sy, 0.0 ni, 83.7 id...背后的调度逻辑这篇就是为你写的实战手册。2. 三态、五态、七态从教学模型到工业级调度的演进逻辑2.1 三态模型操作系统内核的“最小呼吸单元”三态模型就绪Ready、运行Running、阻塞Blocked是所有状态模型的原子基础它精准对应CPU调度器最核心的三个决策点该不该给CPU时间片现在能不能执行要不要暂时让出资源就绪态Ready进程已获得除CPU外的所有资源内存已分配、文件句柄已打开、网络端口已绑定只等调度器分配时间片。此时进程在就绪队列中排队Linux内核用红黑树组织该队列插入/查找复杂度O(log n)确保万级进程下调度延迟稳定在微秒级。运行态Running进程正在CPU上执行指令。这里有个关键细节现代CPU有用户态/内核态隔离所谓“运行”实际指在用户态执行应用代码一旦触发系统调用如read()读文件会立即陷入内核态此时进程仍属Running态但执行的是内核代码。阻塞态Blocked进程因等待某事件磁盘I/O完成、网络包到达、信号量释放而主动放弃CPU。注意阻塞是进程的主动选择不是被强制挂起。内核会将其移出就绪队列放入对应事件的等待队列如socket等待队列、块设备等待队列。为什么三态足够支撑基础调度因为它的设计哲学是“事件驱动”只要进程不等待外部事件就永远在Ready/Running间切换一旦等待就进入Blocked直到事件发生再唤醒。我在嵌入式设备上验证过一个仅需串口通信的温控程序三态模型完全覆盖其生命周期——初始化后Ready主循环Run等待传感器数据时Block数据到达即唤醒。但当系统需要管理成千上万个进程时三态暴露出致命缺陷新建进程要加载代码段、分配栈空间、初始化PCB进程控制块这个过程耗时远超状态切换本身终止进程若不及时回收资源会导致内存泄漏。这直接催生了五态模型。2.2 五态模型生产环境的“全流程管控协议”五态模型在三态基础上增加**新建New和终止Terminated**两个状态形成完整的进程生命周期闭环。这不是简单加法而是对操作系统资源管理责任的明确划分新建态New进程创建请求已发出如fork()系统调用但内核尚未完成PCB初始化、地址空间分配、页表建立等操作。此时进程不可调度也不在任何队列中。实测数据在X86_64架构下fork()平均耗时15~25μs其中80%花在复制父进程页表项和分配内核栈。若在此阶段遭遇OOM内存不足内核会直接返回-ENOMEM错误进程根本不会进入就绪队列。终止态Terminated进程已执行完exit()或收到SIGKILL内核开始回收资源——释放物理内存页、关闭文件描述符、解除信号处理注册。但此时PCB仍保留在内核中等待父进程调用wait()读取退出码。这就是著名的**僵尸进程Zombie**来源父进程不wait()子进程PCB无法销毁ps中显示Z态。五态模型解决了三态的两大痛点资源预检机制新建态允许内核在分配资源前做完整性校验如检查ulimit -v内存限制避免进程启动后因资源不足崩溃资源回收契约终止态强制要求父进程参与回收防止内核资源泄露。我在某电商大促期间处理过典型案例订单服务因数据库连接池耗尽不断fork()子进程重试父进程却未正确wait()导致数小时内积累2000僵尸进程最终耗尽PID namespaceLinux PID最大值默认32768新进程创建全部失败。解决方案不是kill -9而是修复父进程的waitpid()调用逻辑。但五态仍有局限当系统内存紧张时所有就绪/阻塞进程都驻留在物理内存会加剧交换swap压力。七态模型正是为此诞生。2.3 七态模型内存压力下的“分级休眠策略”七态模型将就绪态拆分为活跃就绪Ready Active和静止就绪Ready Inactive将阻塞态拆分为活跃阻塞Blocked Active和静止阻塞Blocked Inactive核心目标是区分进程的内存驻留优先级。活跃就绪/阻塞进程代码和数据页全部驻留在物理内存可随时被调度或唤醒静止就绪/阻塞进程被换出swapped out到磁盘swap区仅保留PCB和少量元数据在内存。唤醒时需先从磁盘读回页面再进入活跃态。这种拆分直击内存管理痛点。以Linux为例当vm.swappiness60默认值时内核会根据进程的oom_score_adj值和最近访问频率将低优先级进程如后台日志压缩进程标记为TASK_UNINTERRUPTIBLE并换出。此时ps命令显示其状态为S可中断睡眠但实际已进入静止阻塞态。我在云服务器上做过压测当内存使用率达95%时redis-server进程若长时间无请求会被标记为静止就绪top中RES常驻内存值骤降50%而VIRT虚拟内存不变——这正是七态模型在起作用。七态模型的工业价值在于精细化资源调控对实时性要求高的进程如音视频编解码可通过mlock()锁定内存强制保持活跃态对批处理任务如日志分析可设置nice值swappiness1促使其快速进入静止态释放内存给前台服务在容器化环境中Kubernetes的memory.limit本质就是七态模型的调度边界——超出限制的进程会被OOM Killer终结而非降级为静止态。提示七态模型并非所有系统都启用。Windows NT内核采用类似机制但不显式暴露静止态FreeBSD通过vm.vmtotal参数控制换出策略而嵌入式RTOS如VxWorks因内存固定通常只用三态。选择哪种模型取决于你的硬件资源约束和实时性需求。3. 状态流转的底层实现从汇编指令到内核函数的全链路解析3.1 状态切换的硬件基石CPU特权级与上下文保存进程状态切换绝非软件层面的简单变量赋值它依赖CPU硬件特性完成原子性保障。以x86_64架构为例特权级隔离CPU有RING0内核态到RING3用户态四级权限。进程运行在RING3当执行syscall指令触发系统调用时CPU自动切换到RING0并将用户态寄存器RIP、RSP、RFLAGS等压入内核栈上下文保存内核在struct task_structPCB中维护两套寄存器现场thread_struct保存CPU寄存器RAX~R15、RIP、RSP等pt_regs保存系统调用时的完整寄存器快照。切换时内核调用__switch_to_asm汇编函数用movq指令批量复制寄存器值耗时约300~500纳秒。关键细节状态变更必须在内核态完成。用户程序无法直接修改自身状态所有状态切换都通过系统调用如nanosleep()使进程Block或中断如时钟中断触发调度触发。我在调试一个高频交易系统时发现某C线程因误用usleep(1)内部调用nanosleep导致每秒产生2000次系统调用CPU在内核态耗时占比达40%。改用clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, ...)并配合sigwait()将系统调用降至每秒5次——这正是理解状态切换开销带来的优化。3.2 核心状态流转路径详解3.2.1 就绪→运行调度器的“临门一脚”当进程从就绪队列被选中执行内核执行以下步骤调用sched_class-pick_next_task()CFS调度器为cfs_rq-rb_leftmost获取最高优先级进程执行context_switch()switch_mm()切换页表基址寄存器CR3使新进程访问自己的虚拟地址空间switch_to()保存当前进程寄存器现场到task_struct-thread加载目标进程寄存器现场CPU跳转到新进程的RIP指令指针开始执行。实测数据在48核服务器上CFS调度器选择下一个进程的平均延迟为12μs但若就绪队列长度超1000延迟升至85μs——这解释了为何高并发服务要限制单机进程数。3.2.2 运行→阻塞事件等待的“主动让权”进程阻塞必经wait_event_interruptible()系列函数。以read()系统调用为例内核检查文件描述符对应的inode若数据未就绪如socket缓冲区为空调用prepare_to_wait()将进程加入等待队列设置进程状态为TASK_INTERRUPTIBLE对应Blocked态调用schedule()放弃CPU触发上下文切换。关键陷阱若在prepare_to_wait()后、schedule()前发生信号如SIGINT进程会被唤醒并返回-EINTR错误。这就是为何read()需循环检查返回值——很多新手代码忽略此情况导致I/O操作意外中断。3.2.3 阻塞→就绪事件到达的“精准唤醒”事件驱动唤醒由硬件中断触发。以磁盘I/O为例进程A发起write()内核将数据拷贝到page cache向块设备驱动提交IO请求驱动程序设置DMA控制器设备完成写入后触发IRQ中断中断处理程序调用blk_mq_complete_request()遍历该IO对应的等待队列对每个等待进程调用wake_up_process()将其状态设为TASK_RUNNING加入就绪队列。我在排查一个数据库慢查询时发现pg_stat_activity显示会话长期处于idle in transaction但strace -p pid却捕获到大量epoll_wait()返回EAGAIN。根源是网络层事件未正确唤醒——TCP接收窗口满时内核将socket置为TCP_CLOSE_WAIT但应用层未及时读取数据导致后续ACK包被丢弃连接假死。这说明阻塞唤醒依赖完整的软硬协同任一环节故障都会导致状态“卡死”。3.3 特殊状态深度解析Zombie、D、T态的实战诊断状态码名称触发条件诊断命令典型案例Z僵尸进程子进程终止父进程未wait()ps auxgrep ZD不可中断睡眠进程等待不可中断事件如磁盘I/O、NFS挂载cat /proc/pid/stackvmware报“另一个程序已锁定文件”实为vmware-vmx进程在D态等待vmdk文件解锁T已停止收到SIGSTOP或调试器暂停kill -CONT pid恢复gdb调试时进程被ptrace暂停ps显示T态D态进程的终极解决方案首先确认是否真为硬件问题dmesg | tail -20查看是否有ata timeout或nvme I/O error若是NFS挂载问题用umount -llazy unmount强制卸载对于VMware锁定重启vmware-hostd服务sudo systemctl restart vmware-hostd而非直接杀进程——后者可能导致虚拟机文件损坏。注意D态进程无法被kill -9终止强行重启是最后手段。我在金融系统中曾因D态进程累积导致/proc目录inode耗尽ls命令失效最终通过echo 1 /proc/sys/vm/drop_caches临时缓解根源是存储阵列固件bug。4. 实战工具链从命令行到内核源码的全维度状态观测4.1 基础命令的深度用法超越ps aux的真相挖掘ps命令的默认输出隐藏了关键信息。必须掌握以下参数组合ps -eo pid,ppid,comm,state,wchan:20,time,etime,argswchan进程等待的内核函数名如do_wait、tcp_recvmsg直接定位阻塞原因etime进程启动至今的秒数识别长周期服务time累计CPU时间判断是否计算密集型。案例wechatappex.exe进程过多时执行此命令发现大量进程wchan为futex_wait_queue_me表明在等待互斥锁根源是微信多开导致IPC竞争。ps -T -p pid显示指定进程的所有线程SPID列为线程IDstat列显示线程状态R运行、S睡眠、D不可中断。top命令的隐藏技巧按H切换线程视图观察Java应用中GC线程java进程下的G1 Young Generation线程是否长期R态判断GC压力按f进入字段管理添加WCHAN等待函数、SWAP交换内存、CODE代码段大小字段按c显示完整命令路径避免被伪装进程欺骗如/tmp/.X11-unix/sangforpwex.exe实为挖矿木马。4.2 进阶诊断/proc文件系统的黄金字段/proc/pid/目录是进程状态的实时镜像。关键文件解读/proc/pid/statusState:R运行、S睡眠、D不可中断、Z僵尸、T停止MMUPageSize:内存页大小4KB/2MB/1GB影响TLB命中率voluntary_ctxt_switchesvsnonvoluntary_ctxt_switches前者为sleep()主动让出后者为时间片用尽被抢占。比值10说明进程I/O频繁。/proc/pid/stack内核栈回溯显示进程当前阻塞在哪个函数。例如$ cat /proc/1234/stack [0] do_wait0x123/0x250 [0] SyS_wait40x8a/0xc0 [0] entry_SYSCALL_64_fastpath0x1f/0xc2表明进程在do_wait()函数等待子进程退出对应waitpid()系统调用。/proc/pid/maps内存映射详情。搜索[heap]段大小判断内存泄漏查找/dev/shm映射确认是否使用共享内存IPC。4.3 动态追踪eBPF实现的状态流转实时监控传统工具只能抓取瞬时快照eBPF可编程内核探针实现毫秒级状态追踪。以下是一个监控进程状态切换的BCC脚本#!/usr/bin/python from bcc import BPF from time import sleep bpf_text #include uapi/linux/ptrace.h #include linux/sched.h struct data_t { u32 pid; char comm[TASK_COMM_LEN]; int old_state; int new_state; }; BPF_PERF_OUTPUT(events); int trace_sched_switch(struct pt_regs *ctx, struct task_struct *prev, struct task_struct *next) { struct data_t data {}; data.pid next-pid; bpf_probe_read_kernel(data.comm, sizeof(data.comm), next-comm); data.old_state prev-state; data.new_state next-state; events.perf_submit(ctx, data, sizeof(data)); return 0; } b BPF(textbpf_text) b.attach_kprobe(eventfinish_task_switch, fn_nametrace_sched_switch) print(Tracing process state switches... Hit Ctrl-C to end.) def print_event(cpu, data, size): event b[events].event(data) state_map {0:R, 1:S, 2:D, 4:T, 8:Z, 16:X} old state_map.get(event.old_state, ?) new state_map.get(event.new_state, ?) print(fPID {event.pid:6} {event.comm.decode(utf-8, replace):15} {old}-{new}) b[events].open_perf_buffer(print_event) while True: try: b.perf_buffer_poll() except KeyboardInterrupt: exit()运行效果PID 1234 nginx S-R PID 5678 java R-S PID 1234 nginx R-S这比strace -e tracesched更轻量且能捕获内核态切换。我在某支付网关上线前用此脚本发现Nginx worker进程在SSL握手时频繁R-S-R切换根源是OpenSSL 1.1.1的EVP_PKEY_sign()函数在ECDSA签名时调用getrandom()阻塞——升级到OpenSSL 3.0启用getentropy()系统调用后解决。4.4 内核源码级调试定位状态机缺陷当标准工具无法解释异常行为时需深入内核源码。以Linux 5.10为例进程状态定义在include/linux/sched.h#define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define __TASK_STOPPED 4 #define __TASK_TRACED 8 #define EXIT_ZOMBIE 16状态切换核心函数__set_current_state()在kernel/sched/core.c其调用栈决定状态变更时机wake_up_process()实现在kernel/sched/core.c检查p-state ! TASK_RUNNING才唤醒。我在修复一个ARM64平台的调度bug时发现TASK_UNINTERRUPTIBLE进程在wake_up_process()后仍不运行。跟踪源码发现ARM64的arch_set_user_mode()函数未正确清除TIF_NEED_RESCHED标志导致调度器认为无需重新调度。补丁仅需一行clear_ti_thread_flag(ti, TIF_NEED_RESCHED);。这印证了状态模型的可靠性最终取决于每一行内核代码的严谨性。5. 常见问题与排查技巧实录来自十年一线战场的避坑指南5.1 “进程无法访问”与“拒绝访问”的本质区别这两类提示常被混为一谈实则根源完全不同“进程无法访问”通常指用户态程序尝试访问非法内存地址如空指针解引用触发SIGSEGV信号。内核将进程状态设为TASK_KILLABLE随后OOM Killer或父进程wait()回收。解决方案是coredump分析gdb调试。“拒绝访问”指权限不足如非root进程尝试bind()到1024以下端口内核返回-EACCES错误进程仍在R或S态正常运行。此时应检查/proc/pid/status中的CapEff:字段有效能力集或用getcap binary查看文件能力位。实操心得当ls -l /proc/pid/exe显示Permission denied不要急着chmod先用sudo ls -l /proc/pid/exe确认是否为/proc挂载选项限制hidepid2。这是Linux 3.3的安全特性非权限问题。5.2 “U盘无法弹出”的进程占用真相Windows提示“请先结束占用进程”本质是文件系统驱动持有U盘设备的引用计数。Linux下对应lsof D /media/usb但常漏掉内核线程。正确排查步骤sudo lsof /media/usb查看用户进程sudo fuser -v /media/usb显示所有访问者含内核线程若输出/media/usb: 1234e末尾e表示打开文件执行sudo fuser -k /media/usb若仍有systemd-udevd占用执行sudo udevadm control --reload-rules sudo udevadm trigger刷新设备规则。我在某次客户现场遇到U盘弹不出fuser显示kworker/0:1H内核工作线程占用。根源是udisks2服务在扫描U盘UUID时触发blkid命令该命令调用libblkid库直接读取设备扇区导致内核线程持有设备句柄。解决方案sudo systemctl stop udisks2.service临时禁用自动挂载。5.3 “Java进程”与“Wechatappex进程”异常增多的根因分析这类问题表象相似根因截然不同Java进程激增多因Runtime.exec()或ProcessBuilder.start()未正确关闭子进程。ps aux | grep java看到大量java -cp /tmp/xxx.jar Main实为定时任务每分钟启动新JVM。解决方案用Process.destroyForcibly()替代destroy()并设置inheritIOfalse避免子进程继承父进程标准流。Wechatappex进程过多微信PC版采用多进程架构wechatappex.exe是渲染进程。异常增多通常因GPU驱动兼容性问题导致渲染进程崩溃后主进程不断重启。验证方法任务管理器中右键该进程→“打开文件所在位置”若路径为C:\Program Files\Tencent\WeChat\则为正版若为C:\Users\XXX\AppData\Local\Temp\则为恶意软件。独家技巧用wmic process where namewechatappex.exe get CreationDate,ProcessId按创建时间排序识别是否集中爆发——若是则检查Windows事件查看器中Application日志的Event ID 1000应用程序错误通常指向dxgi.dll或d3d11.dll版本冲突。5.4 “Mate-indicators进程可关闭吗”的系统稳定性评估Ubuntu Mate桌面的mate-indicators负责状态栏图标网络、音量、电源。能否关闭取决于其依赖关系systemctl --user status mate-indicators查看服务状态journalctl --user -u mate-indicators -n 50查看最近日志若日志中频繁出现Failed to connect to indicator service说明其依赖的dbus会话总线异常此时关闭会导致状态栏图标消失但不影响系统运行若ps aux | grep indicator显示多个同名进程且RSS内存持续增长则存在内存泄漏可安全killall mate-indicators系统会自动重启。避坑经验不要用sudo systemctl stop mate-indicators因其为用户级服务sudo会操作root用户的dbus实例导致权限混乱。正确命令是systemctl --user stop mate-indicators。5.5 “终端进程启动失败(退出代码: -1)”的跨平台诊断矩阵退出码-1在不同系统含义不同需结合平台分析平台-1含义诊断命令解决方案Linuxexecve()系统调用失败如文件不存在、权限不足、ELF格式错误strace -e traceexecve bash -c your_command检查路径、chmod x、file binary确认架构匹配WindowsCreateProcess()返回FALSEGetLastError()为ERROR_FILE_NOT_FOUNDProcess Monitor过滤CreateProcess事件检查PATH环境变量、DLL依赖depends.exemacOSposix_spawn()失败常见于dyld加载器错误dtruss -f -t execve your_commandotool -L binary检查动态库路径install_name_tool修复我在部署一个跨平台Python工具时macOS上-1错误源于pyinstaller打包时未包含libpython3.9.dylib。用otool -L dist/tool发现rpath/libpython3.9.dylib而rpath未设置。解决方案install_name_tool -add_rpath executable_path/../Frameworks dist/tool。最后分享一个小技巧当所有工具都无法定位状态异常时用perf record -e sched:sched_switch -a sleep 10录制10秒调度事件再用perf script | awk {print $9,$11} | sort | uniq -c | sort -nr统计状态切换频次。高频R-S切换指向I/O瓶颈高频S-R切换指向CPU争抢——这是比任何GUI工具都精准的“系统脉搏仪”。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

新手小白了解国际期货先了解哪一步 2026/9/30 13:49:26

新手小白了解国际期货先了解哪一步

很多新手一上来就研究 K 线、找交易策略、急着开户,这是典型的本末倒置。小白学习国际期货,第一步不是学技术分析,而是先认清底层风险和监管边界,把认知基础打牢,再循序渐进往下学。 第一步:搞懂底层属性与…

阅读更多 →
devops-exercises 实战:构建由浏览器 URL 触发的 AWS Lambda 函数(Lambda + API Gateway 全流程) 2026/9/30 13:49:19

devops-exercises 实战:构建由浏览器 URL 触发的 AWS Lambda 函数(Lambda + API Gateway 全流程)

文档教程DevOps运维 【免费下载链接】devops-exercises Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions 项目地址&…

阅读更多 →
AI网关落地实战:Apache APISIX接入大模型的关键技术与踩坑指南 2026/9/30 13:49:18

AI网关落地实战:Apache APISIX接入大模型的关键技术与踩坑指南

先说明一下背景:大家最近都在讨论“AI 网关”,各种网关产品都在往这个方向靠。我实际把 Apache APISIX 接入大模型跑了几个月,把能踩的坑基本踩了一遍。这篇东西不是产品文档的复读,而是把“API 网关为什么需要变成 AI 网关”以及…

阅读更多 →
水库库岸这么长,重点巡查该去哪里?|小浪底库区InSAR实践 2026/9/30 13:49:17

水库库岸这么长,重点巡查该去哪里?|小浪底库区InSAR实践

大型水库库岸线长、斜坡分散、地形复杂。传统 GNSS、水准等地面监测能够对重点部位开展精细观测,却很难覆盖全部库岸。现有监测点之外,哪里正在发生值得关注的形变?本文以小浪底水库为例,分享一次从约1694.7平方公里库区中筛选6处…

阅读更多 →
企业微信API如何打造远程控制机器人?从消息指令到程序执行的完整链路 2026/9/30 13:49:15

企业微信API如何打造远程控制机器人?从消息指令到程序执行的完整链路

最近做的企微二开,运维要求能在企微里远程控制服务器——发条消息"重启 nginx"机器人执行命令并回结果。和之前聊的自然语言控制和快捷指令不同,那些是控制业务系统,这篇是远程控制程序执行——消息变指令、指令变命令、命令执行、…

阅读更多 →
基于卷积神经网络的鲜茶叶分选:从数据集构建到产线部署的工程实践 2026/9/30 13:49:02

基于卷积神经网络的鲜茶叶分选:从数据集构建到产线部署的工程实践

简介:这份PDF文献面向从事茶叶加工、智能装备研发及计算机视觉应用的研究人员与工程技术人员,针对机采鲜茶叶中风选、筛选难以精确细分等级的问题,提出结合计算机视觉与深度学习的智能分选方案。资源包内仅含1个PDF文件,大小约2.3…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉