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

在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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • leetcode17. 电话号码的字母组合,dfs深度优先搜索
  • JC/T 2436-2018 木塑家具板材检测
  • Java 中的 ArrayList 和 LinkedList 在性能上有什么不同?
  • Linux安装Java(JKD)
  • 边缘计算×AI:绘制未来实时智能的宏伟蓝图
  • 智能化的Facebook未来:AI如何重塑社交网络的面貌?
  • Docker-数据卷指令
  • 使用ThreadStatic属性提供线程安全的数据访问
  • 算法学习day30
  • 一天一个Arrays小知识——Arrays.asList()
  • Java在无人驾驶方向的就业方向
  • QT百度智能云API鉴权,查询 文心一言 服务调用情况
  • PXE服务器自助部署
  • Adobe ColdFusion反序列化漏洞(cve-2017-3066)
  • 【Day04】0基础微信小程序入门-学习笔记
  • python3.6+scrapy+mysql 爬虫实战
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Apache的80端口被占用以及访问时报错403
  • CentOS7简单部署NFS
  • Cookie 在前端中的实践
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6核心特性
  • ES6语法详解(一)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS数组方法汇总
  • Next.js之基础概念(二)
  • ng6--错误信息小结(持续更新)
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 电商搜索引擎的架构设计和性能优化
  • 好的网址,关于.net 4.0 ,vs 2010
  • 回顾 Swift 多平台移植进度 #2
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 区块链分支循环
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何在GitHub上创建个人博客
  • 原生 js 实现移动端 Touch 滑动反弹
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​TypeScript都不会用,也敢说会前端?
  • (0)Nginx 功能特性
  • (js)循环条件满足时终止循环
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (回溯) LeetCode 77. 组合
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转)memcache、redis缓存
  • (转)德国人的记事本
  • .NET CORE Aws S3 使用
  • .NET 给NuGet包添加Readme
  • .NET 中让 Task 支持带超时的异步等待