Linux 线程(1):线程概述
一、进程与程序的区别
程序是应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体,也就是程序的动态执行过程。
二、进程与线程的区别
进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段、堆栈段。为了减小进程切换的开销,引入了线程的概念,线程是一个进程内的基本调度单位,也可以称为轻量级进程,线程是在共享内存空间中并发的多道执行路径,共享一个进程的资源。同进程一样,线程也将相关的变量值放在线程控制表内。一个进程可以有多个线程,也就是有多个线程控制表和堆栈寄存器,但却共享一个用户地址空间,而进程在执行过程中拥有独立的内存空间。简而言之,一个程序至少有一个进程,一个进程至少有一个线程。需要注意的是,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
三、线程分类
线程按照调度者可分为用户级线程和核心级线程。
用户级线程:主要解决上下文切换问题,它的调度算法和调度过程全部由用户自行决定,运行不需要内核支持。在这里,操作系统往往会提供一个用户空间线程库,该库提供了线程的创建、调度、撤销等功能,而内核仍然仅对进程进行管理。如果一个进程中某个线程调用了一个阻塞的系统调用,那么该进程以及进程中其他线程会同时被阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。因此,用户级线程在一个进程的多线程调度中无法发挥多处理器优势。
核心级线程:由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。核心级线程允许不同进程中线程按照同一相对优先调度方法进行调度,这样可以发挥多处理器并发优势。
现在操作系统基本上采用用户级线程与内核级线程并存的方法,一个用户级线程可以对应一个或多个核心级线程。在发挥多处理机性能的同时最大限度减少调度开销。
Linux 线程(1):线程概述相关推荐
- Linux C编程--线程操作1--线程概述和简单的线程操作
关于linux线程 在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程 ...
- Linux的进程/线程/协程系列4:进程知识深入总结:上篇
Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...
- linux的进程/线程/协程系列5:协程的发展复兴与实现现状
协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...
- linux的进程/线程/协程系列3:查看linux内核源码——vim+ctags/find+grep
linux的进程/线程/协程系列3:查看linux内核源码--vim+ctags/find+grep 前言 摘要: 1. 下载linux内核源码 2. 打标签方法:vim+ctags 2.1 安装vi ...
- linux的进程/线程/协程系列1:进程到协程的演化
linux的进程/线程/协程系列1:进程到协程的演化 前言 摘要: 1. 一些历史:批处理时代 2. 现代操作系统启动过程 3. 进程(process)的出现 4. 线程(thread)与线程池 5. ...
- 一文搞定Linux进程和线程(详细图解)
Linux 进程和线程 本篇文章我们就深入理解一下 Linux 内核来理解 Linux 的基本概念之进程和线程.系统调用是操作系统本身的接口,它对于创建进程和线程,内存分配,共享文件和 I/O 来说都 ...
- Linux学习06——线程控制与同步互斥
概述 学习目标: 理解线程概念和并发特征,分辨线程与进程的区别与联系 掌握多线程应用编程技术,掌握线程间数据传递基本方法 掌握共享变量识别方法,理解多线程访问共享变量可能带来的问题 理解临界资源.临界 ...
- Linux进程与线程的区别 详细总结(面试经验总结)
首先,简要了解一下进程和线程.对于操作系统而言,进程是核心之核心,整个现代操作系统的根本,就是以进程为单位在执行任务.系统的管理架构也是基于进程层面的.在按下电源键之后,计算机就开始了复杂的启动过程, ...
- Linux查看进程线程个数
1.根据进程号进行查询: # pstree -p 进程号 # top -Hp 进程号 2.根据进程名字进行查询: # pstree -p `ps -e | grep server | awk '{pr ...
最新文章
- 脑机接口和卷积神经网络的初学指南(一)
- 开源:这个来自清华的开源项目火爆 GitHub
- 基于IntelVt技术的Linux内核调试器 - 2
- java fft 频谱算法_快速傅里叶变换(FFT)算法原理及代码解析
- Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长
- mysql对数据库的操作_MySQL数据库对数据库的操作
- 【AtCoder Regular Contest 082】Derangement
- asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发
- 454.四数相加II
- Java生成圆角图标
- SFP光纤收发器搭配光模块的交换机连接方案解决方案
- 数码相机图像处理原理
- iOS生成推送push证书,push.p12文件
- 【原创】Windows图标助手v2.0
- 微信公众号模板消息推送(PHP)
- 聋人大学生终于开通了CNSD博客,CNSD在这里记录自己成长
- 如何将 elasticsearch 版本从 openshift-logging 4.2.36 降级到 v4.2.29
- 二进制/八进制转换器
- 半年学好英语,一辈子都能受益。
- Python性能分析优化及测试