96SEO 2026-02-20 01:50 15
进程是操作系统进行资源分配的基本单位。

每个进程都有一个唯一的标识符PID用于操作系统在管理和调度进程时进行标识和区分。
操作系统可以根据一定的调度算法来分配CPU时间片给不同的进程从而实现多任务并发执行。
在Linux中一个进程的创建实际上伴随着进程控制块PCB或task_struct进程地址空间以及页表的创建。
在一个程序里的一个执行路线就叫做线程thread。
更准确的定义是线程是“一个进程内部的控制序列”。
线程是操作系统进行任务调度的基本单位。
要知道Linux并不存在真正意义上的线程。
线程比进程往往是多对一的即一切进程至少都有一个执行线程
如果Linux实现真的线程那么就需要对这些线程进行管理。
比如说创建线程、终止线程、调度线程、切换线程、给线程分配资源、释放资源以及回收资源等等搞一套与进程类似的线程管理模块整个难度就比较大。
线程并没有独立的虚拟地址空间只是在进程虚拟地址空间中拥有相对独立的一块空间
线程的粒度小于进程不论是创建、切换还是占用资源线程要付出的代价都更少因此通常多线程比多进程并发性更高。
在等待慢速I/O操作结束的同时程序可执行其他的计算任务。
计算密集型应用为了能在多处理器系统上运行将计算分解到多个线程中实现。
I/O密集型应用为了提高性能将I/O操作重叠。
线程可以同时等待不同的I/O操作。
一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。
如果计算密集型线程的数量比可用的处理器多那么可能会有较大的性能损失这里的性能损失指的是增加了额外的同步和调度开销而可用的资源不变。
编写多线程需要更全面更深入的考虑在一个多线程程序里因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的换句话说线程之间是缺乏保护的。
比如进程之间是相互独立的我们打开各种软件一个软件的崩溃并不会影响其他软件变相的也就增加了进程的健壮性而线程就不同了因为大部分资源都是共享的一个线程的崩溃就会导致其他所有线程崩溃进而导致整个进程崩溃
进程是访问控制的基本粒度在一个线程中调用某些OS函数会对整个进程造成影响。
单个线程如果出现除零野指针问题导致线程崩溃进程也会随着崩溃。
线程是进程的执行分支线程出异常就类似进程出异常进而触发信号机制终止进程进程终止该进程内的所有线程也就随即退出。
合理的使用多线程能提高CPU密集型程序的执行效率。
合理的使用多线程能提高IO密集型程序的用户体验如生活中我们一边写代码一边下载开发工具就是多线程运行的一种表现。
与线程有关的函数构成了一个完整的系列绝大多数函数的名字都是以“pthread_”打头的要使用这些函数库要通过引入头文pthread.h链接这些线程函数库时要使用编译器命令的“-lpthread”选项
thread返回线程IDattr设置线程的属性attr为NULL表示使用默认属性start_routine是个函数地址线程启动后要执行的函数arg传给线程启动函数的参数返回值成功返回0失败返回错误码
传统的一些函数是成功返回0失败返回-1并且对全局变量errno赋值以指示错误。
pthreads函数出错时不会设置全局变量errno而大部分其他POSIX函数会这样做。
而是将错误代码通过返回值返回。
pthreads同样也提供了线程内的errno变量以支持其它使用errno的代码。
对于pthreads函数的错误
建议通过返回值判定因为读取返回值要比读取线程内的errno变量的开销更小。
t;pthread_create(t,nullptr,thread_func,nullptr);while(true){coutmain
running...endl;sleep(1);}return
可以看到它们的PID是相同的因为它们属于同一个进程而LWP指的是轻量级进程IDLinux中没有线程而是叫做轻量级进程。
create函数会产生一个线程ID存放在第一个参数指向的地址中。
该线程ID和前面说的线程ID不是一回事。
前面讲的线程ID属于进程调度的范畴。
因为线程是轻量级进程是操作系统调度器的最小单位所以需要一个数值来唯一表示该线程。
pthread_create函数第一个参数指向一个虚拟内存单元该内存单元的地址即为新创建线程的线程ID属于NPTL线程库的范畴。
线程库的后续操作就是根据该线程ID来操作线程的。
到底是什么类型呢取决于实现。
对于Linux目前实现的NPTL实现而言pthread_t类型的线程ID本质就是一个进程地址空间上的一个地址。
从线程函数return。
这种方法对主线程不适用,从main函数return相当于调用exit。
线程可以调用pthread_
功能线程终止参数retva表示线程退出时的退出码信息返回值无返回值跟进程一样结束时无法返回自身。
功能取消一个执行中的线程参数线程ID返回值成功返回0失败返回错误码
已经退出的线程其空间没有被释放仍然在进程的地址空间内。
创建新的线程不会复用刚才退出线程的地址空间。
功能等待线程结束参数thread表示线程IDvalue_ptr
调用该函数的线程将挂起等待直到id为thread的线程终止线程以不同的方法终止通过pthread_join得到的终止状态是不同的
所指向的单元里存放的是thread线程函数的返回值。
如果thread线程被别的线程调用
所指向的单元里存放的是常数PTHREAD_CANCELED就是
的参数。
如果对thread线程的终止状态不感兴趣可以传NULL给
默认情况下新创建的线程是joinable的线程退出后需要对其进行pthread_join操作否则无法释放资源从而造成系统泄漏。
如果不关心线程的返回值join是一种负担这个时候我们可以告诉系统当线程退出时自动释放线程资源。
pthread_detach(pthread_self());
joinable和分离是冲突的一个线程不能既是joinable又是分离的。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback