OS--进程

本文对比分析了Windows和Linux环境下进程与线程的区别,详细解释了Linux内核态分时复用机制,包括内核线程、硬中断、软中断等,并介绍了其他平台如协程、应用程序域和Android Task的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 进程

windows下进程开销极大。

而linux下相当轻量,特别是fork的子进程,句柄,代码段是共享的,数据段是copy-on-write的,开销都极小

2. 线程

资源可以共享,但是出错会影响整个进程,系统不清晰,相对难调试。

在linux下,有两种线程,一种是非内核态的,即用户态通过代码模拟多执行流,开销小,但是对smp支持差。一种内核态,一般一个线程底下对应一个轻量级进程。


比较两者的开销,线程主要是资源共享和通信更方便点。在windows下多进程性能会差很多;而linux下进程相对线程几乎就是增加页表切换那么点时间,这么点时间对线程或者进程要处理的事情实在太小了几乎可以忽略。


3. 内核态分时复用(UNIX/LINUX)

a. 内核线程

b. 硬中断(两段性,top halfs快速标志和结束,bottom halfs处理超时)

c. 软中断 (主要网络收包引起中断/net_rx_action),多处理器

d. tasklets  (一个tasklet只能在跑一次[需要多次自己schedule一下],而且只能在一个处理器上执行完,多个在多个处理器。。。),引入主要是为了替换bottom halfs

e. bottom halfs(看#b),一个bottom half也只在一个cpu上,多个可以多CPU同时执行


NOTE:

yield,sleep等在处理忙等时调用一下,放弃时间片让其他执行体获得机会运行。spin_lock是忙等,单线程只能吃满一个CPU,所以多CPU下即使碰到这种情况下,其他任务还是有机会被调用,影响不是太大。



4. 其他平台的扩展

它们与执行体的映射关系都是m/n。跟linux中的纤程类似。

A. 协程

用户端控制并发,SMP支持良好。

B. 应用程序域

.net中引入的概念,对资源封装好,出现错误不会影响其他应用程序域,对外的表现行为跟进程没有两样。

C. Task

Android中引入的概念。对外表现跟一个进程差不多。其实它是可以配置是跟某某处于同一进程,这样它们间的通讯就无需经过binder之流(参见OS-进程通讯)来跨进程通讯。 手机端的线程或者进程对资源或者电源都是很大的消耗,android把这些全部接管了,以专业的平台来屏蔽这些细节。

......



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值