在Linux中宏观的看待线程

线程一旦被创建,几乎所有的资源都是被所有的线程共享的。

线程也一定要有自己私有的资源,什么样的资源应该是线程私有的?

1.PCB属性私有(线程需要被调度)

2.要有一定的私有上下文结构(线程可能会被切换)

3.每个线程都要有独立的栈结构

ps -aL

##1. Linux线程概念

###什么是线程

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是"一个进程内部的控制序 列"

一切进程至少都有一个执行线程

线程在进程内部运行,本质是在进程地址空间内运行

在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化

透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程 执行流

3.线程切换cache不需要太更新,但是进程切换,cache需要全部更新。

CPU中存在高速缓存cache

线程的优点

创建一个新线程的代价要比创建一个新进程小得多

与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多

线程占用的资源要比进程少很多

能充分利用多处理器的可并行数量

在等待慢速I/O操作结束的同时,程序可执行其他的计算任务

计算密集型(CPU,加密,解密,算法等)应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现

I/O密集型(外设,访问磁盘,显示器,网络)应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

复制代码
ls /lib64/libpthread.*
/lib64/libpthread.a  /lib64/libpthread.so  /lib64/libpthread.so.0

/lib64/libpthread.so.0(用户级线程库)

任何Linux操作系统,都必须默认携带这个库(原生线程库)

OS只认线程,用户也只认线程。

Linux无法直接提供创建线程的系统调用接口!而只能提供创建轻量级进程的接口。

windows中为线程设计了专门的数据结构表示线程对象。TCB

相关推荐
欧恩意3 分钟前
【Tools】Java反汇编工具推荐
java·汇编
geovindu6 分钟前
python: Memento Pattern
开发语言·python·设计模式·备忘录模式
学无止境_永不停歇12 分钟前
十、C++多态
开发语言·c++
寻星探路28 分钟前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
lbb 小魔仙29 分钟前
【Java】Java 实战项目:手把手教你写一个电商订单系统
android·java·python
Aric_Jones33 分钟前
JavaScript 从入门到精通:完整语法指南
开发语言·javascript·ecmascript
星河耀银海35 分钟前
Java安全开发实战:从代码防护到架构安全
java·安全·架构
青云交36 分钟前
Java 大视界 -- 基于 Java 的大数据可视化在城市水资源管理与节水策略制定中的应用
java·java 大数据·java 大数据可视化·城市水资源管理·spark 数据清洗·echarts 热力图·管网漏损控制
鸠摩智首席音效师38 分钟前
如何在 Linux 中将文件复制到多个目录 ?
linux·运维·服务器
岱宗夫up39 分钟前
FastAPI入门(上篇):快速构建高性能Python Web API
开发语言·前端·python·fastapi