当前位置: 首页 > article >正文

线程相关知识

线程是进程内的一条独立执行流是操作系统调度 CPU 的最小单位共享进程的地址空间与资源有自己独立的栈、寄存器、程序计数器。一、核心本质拆解1.从属关系进程是资源分配最小单位内存、文件、句柄线程是CPU 调度最小单位寄生在进程里一个进程至少有 1 个主线程。2.资源共享 私有共享代码段、全局变量、堆内存、文件描述符、信号处理方式私有线程栈、寄存器上下文、PC 程序计数器、线程局部变量 TLS3.轻量级的根本原因创建 / 销毁线程不用重新分配虚拟地址空间只配私有栈和 TCB线程控制块开销远小于进程切换线程不用切换页表、刷新 TLB切换成本极低。二、线程的状态线程五大核心状态汇总表注基于 Linux/Java 通用线程模型适配面试核心考点区分核心特征与流转逻辑线程状态核心定义核心特征触发场景下一状态NEW 新建线程对象已创建操作系统内核线程未初始化未进入调度队列未分配CPU资源未执行任何代码无调度资格程序初始化线程对象尚未调用启动方法调用start()/启动线程 → READY 就绪READY 就绪线程资源已准备完成具备运行条件等待CPU时间片调度不占用CPU常驻调度队列随时可被内核选中执行1. 新建线程启动后2. 线程时间片用完被剥夺CPU3. 阻塞线程等待的事件完成获取CPU时间片 → RUNNING 运行RUNNING 运行线程正在CPU上执行业务代码是唯一占用CPU的状态占用CPU资源执行指令、处理逻辑消耗时间片操作系统调度器选中就绪线程分配CPU时间片1. 时间片耗尽 → READY2. 等待锁/IO/sleep → BLOCKED3. 代码执行完毕 → TERMINATEDBLOCKED 阻塞/等待线程主动放弃CPU暂停执行等待外部事件触发不占用、不抢占CPU彻底释放时间片是并发高效的关键1. 等待锁mutex2. 阻塞式IO读写3. 调用sleep/wait4. 等待条件变量等待事件触发/超时唤醒 → READY 就绪TERMINATED 终止线程代码执行完毕或异常终止生命周期结束彻底结束调度等待系统回收线程栈、TCB等资源无法再次启动1. 线程主方法执行完成2. 线程被主动终止3. 运行中抛出致命异常无生命周期终结面试核心总结只有运行态占用CPU就绪、阻塞态均不占用CPU资源线程不会从阻塞态直接进入运行态必须先回到就绪态等待CPU调度阻塞是主动放弃CPU就绪是等待CPU分配二者本质区别是否具备立刻执行的条件三、线程和进程区别对比维度进程 (Process)线程 (Thread)资源独立性拥有独立的内存空间、文件描述符等系统资源共享所属进程的内存空间和资源仅拥有独立的栈、程序计数器等创建 / 切换开销开销大涉及资源分配与回收、页表切换、TLB 刷新开销小仅需保存少量上下文信息无需切换地址空间通信方式需通过进程间通信IPC机制如信号、消息队列、管道、共享内存、Socket 等可直接通过共享内存通信需同步机制避免冲突如互斥锁、条件变量健壮性一个进程崩溃通常不影响其他进程一个线程崩溃可能导致整个进程崩溃调度单位操作系统资源分配的最小单位操作系统 CPU 调度的最小单位上下文切换成本高需切换页表、刷新 TLB、保存完整进程上下文低仅需保存线程栈、寄存器上下文同进程共享地址空间数据共享效率低需通过 IPC 机制涉及内核态切换与数据拷贝高直接读写进程共享内存无额外拷贝开销适用场景- 任务间需要严格隔离如浏览器标签页- 充分利用多核 CPU 处理 CPU 密集型任务如大规模计算- 长时间运行的独立任务如后台备份、视频转码- 运行不稳定或第三方代码避免崩溃影响整体- 任务间需要频繁共享数据如 Web 服务器处理多请求- 轻量级并发追求低开销如 GUI 程序后台加载数据- I/O 密集型任务如网络请求、文件读写可利用等待时间切换- 短期、协作紧密的子任务如数据分片处理后汇总四、多线程相关函数1.创建与终止函数1pthread_create 创建线程项目内容所需头文件#include pthread.h函数原型int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);功能在调用进程中创建一个新的线程参数thread输出参数用于存储新创建线程的唯一标识符线程 ID参数attr指定新线程的属性NULL表示使用系统默认属性参数start_routine线程的入口函数指针线程创建后将执行这个函数参数arg传递给入口函数的参数无参数时设为NULL返回值成功返回0线程 ID 写入thread失败返回非 0 错误码2pthread_exit 线程退出项目内容所需头文件#include pthread.h函数原型void pthread_exit(void *retval);功能结束当前线程并可返回退出状态值参数retval传递给回收线程的退出状态值不需要则传NULL返回值无示例代码#include stdio.h #include stdlib.h #include pthread.h // 必须包含 pthread 头文件 #include unistd.h // 用于 sleep() // 1. 定义线程入口函数必须符合 void* (*)(void*) 的签名 void *thread_func(void *arg) { // 把主线程传来的参数强转为 int 类型 int thread_num *(int *)arg; free(arg); // 释放主线程动态分配的参数内存避免内存泄漏 printf(子线程 %d 开始运行\n, thread_num); // 模拟耗时任务 sleep(2); // 2. 线程退出并返回状态值这里用线程号作为示例 pthread_exit((void *)(long)thread_num); } int main() { int thread_count 3; pthread_t threads[thread_count]; // 存储线程ID的数组 for (int i 0; i thread_count; i) { // 动态分配内存传递参数避免栈变量被覆盖的经典坑 int *arg malloc(sizeof(int)); *arg i; // 3. 创建线程 int ret pthread_create( threads[i], // 输出线程ID NULL, // 使用默认线程属性 thread_func, // 线程入口函数 arg // 传递给入口函数的参数 ); if (ret ! 0) { perror(pthread_create 失败); exit(EXIT_FAILURE); } } printf(主线程等待所有子线程结束...\n); // 4. 等待所有子线程结束并回收资源 for (int i 0; i thread_count; i) { void *retval; pthread_join(threads[i], retval); // 阻塞等待子线程退出 // 强转回 int打印子线程的退出状态 printf(子线程 %d 已退出返回值%ld\n, i, (long)retval); } printf(所有子线程已结束主线程退出\n); return 0; }2.线程标识函数1pthread_self函数项目内容所需头文件#include pthread.h函数原型pthread_t pthread_self(void);功能获取调用该函数的线程自身的线程 ID参数无返回值总是成功返回调用线程的线程 ID类型为pthread_tpthread_self() 是无参数、无失败情况的函数调用它只会返回当前线程的 ID。它和 pthread_create 中获取的线程 ID 是同一种类型 pthread_t但不能直接和操作系统的 LWP轻量级进程 ID划等号。常用于线程内部打印日志、调试或作为线程的唯一标识使用2示例代码#include stdio.h #include stdlib.h #include pthread.h #include unistd.h // 线程入口函数 void *thread_func(void *arg) { int thread_num *(int *)arg; free(arg); // ✅ 关键用 pthread_self() 获取当前线程的ID pthread_t tid pthread_self(); printf(子线程 %d 运行线程ID: %lu\n, thread_num, (unsigned long)tid); sleep(1); pthread_exit((void *)(long)thread_num); } int main() { int thread_count 2; pthread_t threads[thread_count]; printf(主线程启动主线程ID: %lu\n, (unsigned long)pthread_self()); for (int i 0; i thread_count; i) { int *arg malloc(sizeof(int)); *arg i; int ret pthread_create(threads[i], NULL, thread_func, arg); if (ret ! 0) { perror(pthread_create failed); exit(EXIT_FAILURE); } } // 等待所有子线程结束 for (int i 0; i thread_count; i) { void *retval; pthread_join(threads[i], retval); printf(子线程 %d 已退出\n, (int)(long)retval); } printf(所有子线程结束主线程退出\n); return 0; }1.pthread_t 类型它是一个不透明类型通常是无符号长整型所以打印时需要强转为 unsigned long 类型。2.pthread_self() vs gettid()pthread_self() 返回的是用户态线程库中的线程 ID仅在进程内唯一。gettid() 返回的是内核 LWP ID全局唯一但不是标准库函数需要系统调用。3.典型用途线程内部调试日志打印当前线程 ID线程局部存储TLS中作为键使用线程间互斥 / 同步时标识身份3.线程回收函数1pthread_join 线程回收项目内容所需头文件#include pthread.h原型int pthread_join(pthread_t thread, void **retval);功能阻塞等待指定的结合态线程结束并回收其资源参数thread要回收的线程 ID参数retval接收线程退出状态值的指针不关心则传NULL返回值成功返回0失败返回非 0 错误码2pthread_attr_init 初始化线程属性项目内容所需头文件#include pthread.h原型int pthread_attr_init(pthread_attr_t *attr);功能将一个线程属性对象初始化为默认值参数attr需要初始化的线程属性对象指针返回值成功返回0失败返回非 0 错误码3pthread_attr_setdetachstate 设置分离状态项目内容所需头文件#include pthread.h原型int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);功能设置线程属性对象的分离状态参数attr要设置的线程属性对象指针参数detachstate线程状态-PTHREAD_CREATE_JOINABLE结合态默认需join回收-PTHREAD_CREATE_DETACHED分离态系统自动回收资源返回值成功返回0失败返回非 0 错误码4pthread_attr_destroy 销毁线程属性项目内容所需头文件#include pthread_attr_t *attr);功能销毁一个已初始化的线程属性对象参数attr要销毁的线程属性对象指针返回值成功返回0失败返回非 0 错误码5结合态与分离态状态特点适用场景结合态 (JOINABLE)线程结束后资源不会自动释放需其他线程调用pthread_join回收可获取退出状态主线程需要等待子线程完成、需要子线程返回结果的场景分离态 (DETACHED)线程结束后资源由系统自动回收无需也无法join无法获取退出状态主线程不关心子线程结果只想让其后台运行的场景6示例代码#include stdio.h #include stdlib.h #include pthread.h #include unistd.h // 线程入口函数 void *thread_func(void *arg) { int id *(int *)arg; free(arg); printf(线程 %d 开始运行tid: %lu\n, id, (unsigned long)pthread_self()); sleep(1); // 模拟耗时任务 printf(线程 %d 运行结束\n, id); pthread_exit((void *)(long)id); } int main() { pthread_t tid_joinable, tid_detached; pthread_attr_t attr; // -------------------- 1. 创建结合态线程默认 -------------------- int *arg1 malloc(sizeof(int)); *arg1 1; pthread_create(tid_joinable, NULL, thread_func, arg1); // -------------------- 2. 创建分离态线程通过属性设置 -------------------- int *arg2 malloc(sizeof(int)); *arg2 2; // 初始化线程属性 pthread_attr_init(attr); // 设置为分离态 pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED); // 使用自定义属性创建线程 pthread_create(tid_detached, attr, thread_func, arg2); // 销毁属性对象属性对象可以重复使用这里用完直接销毁 pthread_attr_destroy(attr); // -------------------- 3. 回收结合态线程 -------------------- void *retval; printf(主线程等待结合态线程1结束...\n); pthread_join(tid_joinable, retval); printf(结合态线程1已回收退出状态%ld\n, (long)retval); // 注意分离态线程无法被join也不需要手动回收 printf(主线程结束分离态线程2将由系统自动回收资源\n); sleep(2); // 等待分离态线程执行完毕防止主线程提前退出 return 0; }7核心注意事项1.pthread_join 只能回收结合态线程对分离态线程调用 pthread_join 会直接失败返回 EINVAL 错误。2.线程属性对象可复用初始化后的 pthread_attr_t 可以多次用于创建线程用完再销毁即可。3.主线程退出会杀死所有子线程即使是分离态线程如果主线程提前 exit()所有子线程都会被强制终止所以主线程需要确保子线程执行完毕。4.线程退出方式pthread_exit()仅结束当前线程不影响其他线程return在线程函数中 return 等价于 pthread_exit()exit()结束整个进程所有线程都会终止4.线程控制函数1pthread_detach 分离线程项目内容所需头文件#include pthread.h原型int pthread_detach(pthread_t thread);功能将一个已创建的线程标记为分离态线程结束后系统自动回收资源参数thread要设置为分离态的线程 ID返回值成功返回0失败返回非 0 错误码与 pthread_attr_setdetachstate 的区别pthread_attr_setdetachstate创建线程前通过属性设置为分离态。pthread_detach创建线程后将其转为分离态。2pthread_cancel 取消线程项目内容所需头文件#include pthread.h原型int pthread_cancel(pthread_t thread);功能向指定线程发送取消请求目标线程的处理方式取决于取消状态和类型参数thread要取消的线程 ID返回值成功返回0失败返回非 0 错误码3pthread_setcancelstate 设置取消状态项目内容所需头文件#include pthread.h原型int pthread_setcancelstate(int state, int *oldstate);功能设置调用线程的可取消状态参数state新的取消状态-PTHREAD_CANCEL_ENABLE可被取消默认-PTHREAD_CANCEL_DISABLE不可被取消参数oldstate用于保存之前的取消状态可用于恢复返回值成功返回0失败返回非 0 错误码4pthread_setcanceltype 设置取消类型项目内容所需头文件#include pthread.h原型int pthread_setcanceltype(int type, int *oldtype);功能设置调用线程的取消响应方式参数type新的取消类型-PTHREAD_CANCEL_DEFERRED延时取消默认线程执行到取消点时才退出-PTHREAD_CANCEL_ASYNCHRONOUS异步取消收到请求后立即退出参数oldtype用于保存之前的取消类型返回值成功返回0失败返回非 0 错误码(5) 关键解析取消点Cancel Point当线程处于延时取消模式时只有在调用特定系统函数如 sleep()、read()、write()、pthread_cond_wait() 等时才会响应取消请求并退出。取消线程的风险直接取消线程可能导致资源泄漏如未释放的锁、未关闭的文件句柄。建议配合清理函数 pthread_cleanup_push/pop 使用确保线程退出前能释放资源。6完整示例代码#include stdio.h #include stdlib.h #include pthread.h #include unistd.h // 线程清理函数线程被取消时自动调用 void cleanup(void *arg) { printf(线程清理释放资源参数%p\n, arg); } void *thread_func(void *arg) { // 注册清理函数栈式注册push和pop必须成对出现 pthread_cleanup_push(cleanup, (void*)0x1234); printf(子线程开始运行tid: %lu\n, (unsigned long)pthread_self()); // 设置取消类型为延时取消默认 int oldtype; pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, oldtype); // 模拟耗时任务sleep是取消点 for (int i 0; i 5; i) { printf(子线程运行中...%d\n, i); sleep(1); } printf(子线程正常结束\n); // 弹出清理函数若线程正常结束清理函数不会被执行 pthread_cleanup_pop(0); return NULL; } int main() { pthread_t tid; pthread_create(tid, NULL, thread_func, NULL); sleep(2); // 让子线程运行一段时间 printf(主线程发送取消请求\n); pthread_cancel(tid); // 发送取消请求 // 等待线程结束并回收资源 void *retval; pthread_join(tid, retval); if (retval PTHREAD_CANCELED) { printf(线程已被取消\n); } else { printf(线程正常结束返回值%p\n, retval); } return 0; }7核心注意事项pthread_cancel 只是发送请求不是强制终止。线程是否响应、何时响应取决于其取消状态和类型。分离态线程也可以被取消但主线程无法通过 pthread_join 获取其退出状态。尽量避免异步取消它会导致线程在任意位置终止极易造成资源泄漏和状态不一致。清理函数 pthread_cleanup_push/pop 必须成对使用且必须写在同一函数的同一层级中否则会导致栈5.线程的通信方式方式核心作用适用场景特点Linux 常用 API共享全局 / 静态变量直接传递数据简单数据交互天然共享、效率最高存在数据竞争必须加锁保护直接读写全局变量互斥锁 mutex保证临界区同一时刻只一个线程进入多线程争抢共享资源只能互斥、不能等待简单易用pthread_mutex_lock/unlock条件变量 cond线程等待 / 唤醒条件不满足就阻塞生产者 - 消费者、任务队列必须配合互斥锁精准唤醒线程pthread_cond_wait/signal/broadcast信号量 semaphore资源计数、同步 互斥限流、多生产者多消费者可跨线程 / 跨进程支持设置资源个数sem_wait/sem_post读写锁 rwlock读共享、写独占读多写少场景配置、缓存并发读效率远高于互斥锁pthread_rwlock_rdlock/wrlock线程信号 / 事件异步通知、唤醒阻塞线程异常中断、事件触发偏向通知机制不适合传大量数据Linux线程信号WindowsEvent 事件传数据共享变量防竞争互斥锁等条件、排队干活条件变量限流计数信号量读多写少优化读写锁异步通知唤醒线程信号 / 事件五、总结1、pthread 线程生命周期 全景表格阶段核心函数功能关键参数 / 返回重要考点创建线程pthread_create创建一个新线程成功 0失败 错误码线程默认是可结合态joinable获取自身 IDpthread_self获取当前线程 ID返回pthread_t无失败线程内调用等待线程结束pthread_join阻塞等待线程退出、回收资源成功 0只能等待 joinable 线程设置分离态pthread_detach将线程改为分离态成功 0分离后不能 join系统自动回收线程退出pthread_exit终止当前线程可带返回值只退出线程不退出进程取消线程pthread_cancel发送取消请求成功 0不是立即杀死看取消状态设置取消状态pthread_setcancelstate允许 / 禁止被取消ENABLE / DISABLE默认允许取消设置取消类型pthread_setcanceltype延时 / 异步取消DEFERRED / ASYNCHRONOUS默认延时取消安全线程属性初始化pthread_attr_init初始化属性对象成功 0创建分离态线程必须用设置分离属性pthread_attr_setdetachstate创建前指定分离 / 结合JOINABLE / DETACHED比 detach 更早设置销毁属性pthread_attr_destroy释放属性资源成功 0使用完必须销毁2、线程 生命周期流程图文字版主线程 ↓ pthread_create ——→ 创建子线程新建 → 就绪 → 运行 ↓ 子线程开始执行 ↓ 子线程运行中 - 可调用 pthread_self 获取自己ID - 可设置 setcancelstate / setcanceltype ↓ 子线程两种结束方式 1. 正常结束 → return / pthread_exit 2. 被取消 → pthread_cancel到达取消点退出 ↓ 线程结束后 ├── 若为 JOINABLE默认→ 必须 pthread_join 回收 └── 若为 DETACHED → 系统自动回收无需 joinjoinable 必须 join否则资源泄漏detached 不能 join系统自动清理cancel 只是发请求不是立即杀死默认延时取消3、完整示例#include stdio.h #include pthread.h #include unistd.h // 线程运行函数 void* func(void* arg) { int id *(int*)arg; // 获取自身线程ID pthread_t tid pthread_self(); printf(线程%d 运行tid%lu\n, id, (unsigned long)tid); // 设置允许取消默认就是允许演示用 pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); // 设置延时取消默认安全 pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); sleep(3); // 取消点 printf(线程%d 正常结束\n, id); return NULL; } int main() { pthread_t tid; int num 1; // 1. 创建线程 pthread_create(tid, NULL, func, num); sleep(1); // 2. 取消线程 pthread_cancel(tid); // 3. 等待回收必须join因为默认joinable void* ret; pthread_join(tid, ret); if (ret PTHREAD_CANCELED) printf(线程已被取消\n); return 0; }

相关文章:

线程相关知识

线程是进程内的一条独立执行流,是操作系统调度 CPU 的最小单位,共享进程的地址空间与资源,有自己独立的栈、寄存器、程序计数器。一、核心本质拆解1.从属关系 进程是资源分配最小单位(内存、文件、句柄); 线…...

DeepSeek在MMLU基准测试中狂揽86.7分:这3个被99%开发者忽略的推理优化技巧,立竿见影!

更多请点击: https://intelliparadigm.com 第一章:DeepSeek在MMLU基准测试中狂揽86.7分:技术突破与行业意义 DeepSeek-V3 在涵盖57个学科领域的MMLU(Massive Multitask Language Understanding)基准测试中取得86.7%的…...

基于AI宏观流动性监测框架的黄金三日连跌研究:美联储加息预期按兵不动后的市场重定价逻辑

摘要:本文通过AI宏观利率模型、美元流动性监测系统与黄金波动率因子分析,结合美通胀数据、美债收益率变化及市场利率预期重定价过程,分析黄金连续三日回落背后的核心驱动逻辑,并探讨当前“高利率持续”环境下黄金资产的阶段性压力…...

ThreadLocal原理与内存泄漏防范

前言 在现代软件开发中,ThreadLocal原理与内存泄漏防范是一个非常重要的技术点。本文将从原理到实践,带你深入理解这一技术,并通过完整的代码示例帮助你快速掌握核心知识点。 核心概念 基本原理 ThreadLocal原理与内存泄漏防范的核心在于理解…...

MySQL数据库基础3--(函数)完

一、聚合函数聚合函数包括COUNT()、SUM()、AVG()、MAX()和MIN()。当需要对表中的记录求和、求平均值、查询最大值和查询最小值等操作时,可以使用聚合函数。GROUP BY关键字通常需要与聚合函数一起使用。COUNT()用来统计记录的条数;SUM()用来计算字段的值的…...

Zabbix监控扩展实战:zbx-openclaw开源模板深度解析与应用指南

1. 项目概述与核心价值最近在折腾监控告警系统,发现一个挺有意思的开源项目,叫zbx-openclaw。这名字乍一看有点抽象,但拆开来看就明白了——zbx指的是 Zabbix,那个老牌的监控系统;openclaw直译是“开放的爪子”&#x…...

【DeepSeek Chat功能测试全链路指南】:20年AI工程师亲测的7大核心场景验证法

更多请点击: https://intelliparadigm.com 第一章:DeepSeek Chat功能测试的底层逻辑与验证哲学 DeepSeek Chat 的功能测试并非仅面向接口响应的“黑盒点击”,而是建立在模型行为可解释性、推理路径可追溯性与系统边界可控性三重基石之上的验…...

Simics在网络转型与SDN迁移中的核心价值与应用

1. Simics在网络转型与SDN迁移中的核心价值解析网络架构正经历从传统硬件设备向软件定义网络(SDN)和网络功能虚拟化(NFV)的深刻变革。这场变革的核心挑战在于:如何在保持网络高性能的同时,实现控制平面与数据平面的解耦,以及如何将传统网络功…...

Mali GPU着色器优化与性能分析实战

1. Mali离线着色编译器深度解析Mali离线着色编译器是Arm为开发者提供的专业工具链组件,专门用于分析和优化面向Mali GPU架构的着色器代码。与运行时编译不同,它允许开发者在构建阶段就对着色器性能进行静态分析和调优。1.1 核心工作原理该工具通过模拟Ma…...

基于CRICKIT与CircuitPython的蛇形机器人避障项目实践

1. 项目概述与核心思路最近在捣鼓一个挺有意思的创客项目:用Adafruit的CRICKIT扩展板和CircuitPython,做一个能自己溜达、遇到障碍会躲开的蛇形机器人。这玩意儿听起来复杂,其实拆解开来,核心就是“感知-决策-执行”这个经典的控制…...

AMD NPU加速GPT-2微调:边缘AI训练实战解析

1. AMD NPU与客户端AI训练的技术背景在AI模型部署领域,边缘计算正经历着从单纯推理到完整训练工作流的范式转变。传统上,像GPT-2这样的语言模型训练完全依赖云端GPU集群,但这种方式存在数据隐私泄露、网络延迟和持续服务依赖等固有缺陷。AMD …...

NoFences:你的Windows桌面整理革命,告别杂乱无章的终极方案

NoFences:你的Windows桌面整理革命,告别杂乱无章的终极方案 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在几十个图标中寻找需要的应…...

免费电商平台批量下载图片方法,好用的让你不敢相信

pc+浏览器方法,批量快速下载淘宝、拼多多、抖音等常用电商均满足。 全程不花一分钱,所有资源都免费。 方法简单,操作方便。 只需在浏览其中增加 (downpictures) 当图扩展即可。 一、操作方法如下: 1、如使用edge浏览器,访问这个网址:当图 ,然后点击按钮“获取”,…...

超长上下文时代来临:百万Token窗口实测,我的工作流彻底变了

前言:一个让我彻底改变工作方式的实验 2026年初,我做了一件以前根本不敢想的事:把一份长达800页的技术规范文档,直接塞进了一个大模型的上下文窗口,然后让它帮我找出其中所有与安全性相关的条款,并逐条解释…...

ChatGPT购物功能支持平台速查表,含响应延迟、支付闭环率、商品图识别准确率等5项硬指标实测数据

更多请点击: https://intelliparadigm.com 第一章:ChatGPT购物功能支持哪些平台 截至2024年,ChatGPT原生并不直接集成电商交易能力,但通过官方插件(Plugins)和第三方API集成,可在特定授权环境…...

疯狂五月:AI 化身最强“神探”,重塑网络安全攻防战

原文链接:AI 小老六 在网络安全领域,每个月的第二个星期二被称为“补丁星期二(Patch Tuesday)”,是微软等科技巨头集中发布安全更新的日子。然而,2026 年 5 月的这一天显得格外特殊——整个科技圈正在经历一…...

自动驾驶-数据解析01:四元数04【nuPlan 数据集中的 ego2global_rotation 四元数是采集时生成的,还是后期处理得到的?】

标题:nuPlan 数据集中的 ego2global_rotation 四元数是采集时生成的,还是后期处理得到的? 1. 先给结论 在讨论 nuPlan 数据集中的自车姿态四元数时,不能简单地说: 它一定是车辆采集瞬间直接生成的原始四元数。也不能简单地说: 它是后期人工标注生成的四元数。更准确的…...

Vivado XADC IP核 配置与接口实战解析

1. XADC IP核基础入门 XADC(Xilinx Analog-to-Digital Converter)是Xilinx FPGA芯片内置的高精度模拟数字转换模块,它能实时监测芯片内部的电压、温度以及外部模拟信号。在Vivado开发环境中,我们可以通过XADC Wizard IP核快速配置…...

会议录播堆积如山?用这款AI工具3分钟自动生成会议纪要

一个很普遍的职场痛点:每周开3-4个会,录播存了一堆,但从来没有整理过。 不是不想整理,是整理一小时的会议录像至少要40分钟——要从头拉一遍、要标重点、要区分谁说了什么、要提炼行动项。忙的时候根本没时间干这个。 结果就是&…...

搜索广告算法工程师大模型学习--1.计划

大模型时代搜索广告算法专家:理论与数学重构进阶计划 前置约束与学习定调: 核心目标:从传统 NLP 分类思维彻底向大模型生成式思维(Generative)与搜索广告业务思维(Ranking/Retrieval)转型。学…...

3分钟看懂无人机飞行日志:免费在线工具让数据说话

3分钟看懂无人机飞行日志:免费在线工具让数据说话 【免费下载链接】UAVLogViewer An online viewer for UAV log files 项目地址: https://gitcode.com/gh_mirrors/ua/UAVLogViewer 还在为看不懂无人机飞行日志而烦恼吗?那些密密麻麻的数据、复杂…...

下载视频不如用Via,一分都不花

找了很长时间,没想到竟然这么简单,为啥早没发现呢! 工具的名称叫Via浏览器是个App,没错在安卓手机或平板运行的工具。 缺点:pc下用不了,有些视频下不了,如爱奇艺等。苹果手机是否能用不知道,自己试吧。 优点:操作方便、简单,即使你是小白也能熟练操作。免费,一分…...

提示工程:从AI调教到结构化沟通的系统方法论

1. 项目概述:从“咒语”到“工程”的思维跃迁最近在GitHub上看到一个挺有意思的项目,叫“Hazrat-Ali9/Prompt-Engineering”。乍一看,这名字有点神秘,但点进去你会发现,它其实是一个关于“提示工程”的资源集合。这让我…...

华硕游侠2-RX键盘多功能滚轮自定义M失效的解决方案

新买了一块游侠2 rx键盘,想着用自定义滚轮方便打开常用程序,但是发现在Armoury Crate中设置后不起作用,网上解决方案伤筋动骨,得不偿失,有一定风险。 经测试,自定义滚轮能正常执行宏定义,只是对…...

C++内存可视化利器:silicondawn/memory-viewer库实战指南

1. 项目概述与核心价值最近在调试一个涉及复杂内存操作的C项目时,我又一次陷入了“内存黑盒”的困境。指针指向的数据结构到底对不对?序列化后的字节流里某个字段的值是不是我预期的?手动printf或者断点查看十六进制,效率低不说&a…...

Visual C++运行库终极修复指南:一键解决“缺少DLL文件“的完整解决方案

Visual C运行库终极修复指南:一键解决"缺少DLL文件"的完整解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开某个软…...

SpringBoot+Vue民宿管理系统源码+论文

代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

Go语言WebSocket服务器tocket:轻量级高性能实时通信方案

1. 项目概述:一个轻量级、高性能的WebSocket服务器 最近在折腾一个需要实时双向通信的物联网项目,传统的HTTP轮询方案在延迟和服务器开销上都不太理想,WebSocket自然就成了首选。在技术选型时,我习惯性地会去GitHub上搜罗一番&…...

基于Claude的代码库感知工具:智能编程助手的设计与实战

1. 项目概述:当Claude遇上代码库,一个智能编程助手的诞生最近在GitHub上看到一个挺有意思的项目,叫openclaw-claude-code。光看名字,你可能会觉得这又是一个基于某个大语言模型的代码生成工具,但实际深入了解后&#x…...

论文详解:考虑人类移动日常节律的动态社区检测

论文详解:考虑人类移动日常节律的动态社区检测 文章目录 论文详解:考虑人类移动日常节律的动态社区检测 1. 论文基本信息 2. 摘要与核心贡献 2.1 研究背景 2.2 研究方法 2.3 核心贡献 3. 研究背景与问题提出 3.1 城市空间结构研究的重要性 3.2 传统静态社区检测的局限性 3.3 …...