早在以前,我们就知道,CPU调度的基本单位是线程,而进程是拥有资源的基本单位,进程是用进程描述符表示的,那么线程是怎么实现和表示的呢?

      线程机制是现代编程技术中常用的一种抽象概念.该机制提供了在同一程序内共享内存地址空间运行的一组线程.这些线程还可以共享打开的文件和其他的资源(都是指进程的)。线程机制支持并发程序设计技术,在多处理器系统上,它也能保证真正得并行处理。

     下面,首先看下面张图:(画的很不好看,很是惭愧)


      这张图中,可以看出进程和线程是一样的,只是进程比线程要大,而且它们指向相同的内存地址空间,这是为什么?

      Linux实现线程的机制非常独特。从内核的角度说,他并没有线程这个概念。Linux把所有的线程都当做进程来实现。内核并没有准备特殊的调度算法或者是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的 task_struct ,所以在内核中,它看起来像是一个普通的进程(只是它和其他一些进程共享某些资源,如地址空间),只是它并没有自己独立的内存地址空间。

      上述线程机制的实现和 Microsoft Windows 等操作系统的实现差异非常大。这些系统都在内核中提供了专门支持线程的机制(这些系统常常把线程称作是轻量级进程)。“轻量级进程”这种叫法本身就概括了Linux与其他系统的差异。

      加入现在需要一个包含四个线程的进程,在提供专门支持线程的系统中,通常会有一个指向四个不同线程的指针的进程描述符。该描述符负责描述像地址空间,打开的文件这样的共享资源。线程本身再去描述它独占的资源。相反,Linux仅仅创建四个进程并分配四个普通的 task_struct 结构。建立这四个进程时指定它们共享某些资源,这是相当高雅的做法。

线程在Linux中的实现相关推荐

  1. linux已使用线程,在Linux中使用线程

    4. 线程本地存储 内线程之间可以共享内存地址空间,线程之间的数据交换可以非常快捷,这是线程最显著的优点.但是多个线程访问共享数据,需要昂贵的同步开销,也容易造成与同步相关的BUG,更麻烦的是有些数据 ...

  2. java获取linux下面所有线程,获取Linux中Java线程的线程ID

    最后,我发现JNI方式是解决我的问题的最佳方式.作为参考,我张贴代码,并建立它(基于example在维基百科)说明: Java类负责接口的C代码(GetThreadID.java): public c ...

  3. linux中线程ptid,Linux 线程(1)线程创建

    1. 线程 线程是一个轻量化的进程,关于进程与线程的详细概念参见: 进程与线程 线程相比与进程而言,其控制和调度更加灵活,由于同一进程的多个线程共享同一地址空间,因此Text Segment.Data ...

  4. linux中线程和进程的区别深度剖析底层实现

    文章目录 前言 Linux中进程和线程的共性 Linux中进程的创建 Linux中线程的实现 总结 前言 在没有仔细了解过Linux的进程和线程实现机制之前,看过很多关于进程和线程的博客,从这些博客中 ...

  5. linux下查看进程的线程数,linux查看进程的线程数

    top -H -p $PID  #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...

  6. Linux中pthread_create函数的实现

    转:http://blog.sina.com.cn/s/blog_6abf2c040101fpca.html 原文地址:[原]Linux中pthread_create函数的实现作者:jiq408694 ...

  7. linux线程堆分配,如何在Linux中的相同进程下为线程分配堆栈或内存

    Linux中当前的"线程"概念是 NPTL. NPTL使用 clone(),包装 sys_clone().为新的'线程'分配堆栈在用户空间(即libc)中处理,而不是在内核(即Li ...

  8. linux创建线程未定义,Linux中未定义的对p线程_CREATE的引用

    Linux中未定义的对p线程_CREATE的引用#include #include #define NUM_THREADS     5void *PrintHello(void *threadid){ ...

  9. linux系统如何查看是否是线程死锁,多线程中如何使用gdb精确定位死锁问题

    本文转载自微信公众号「程序喵大人」,作者程序喵大人 .转载本文请联系程序喵大人公众号. 在多线程开发过程中很多人应该都会遇到死锁问题,死锁问题也是面试过程中经常被问到的问题,这里介绍在c++中如何使用 ...

最新文章

  1. 六个方法助您优化云存储成本
  2. 大数据竞赛平台——Kaggle 入门篇
  3. Eclipse Class Decompiler---Java反编译插件
  4. 《大型门户网站是这样炼成的!(Struts 2+Spring 2+Hibernate 3) 》
  5. DELL XPS 9350 无线网卡DW1820A WIN7驱动异常解决
  6. 电话光端机的电话业务不通问题,该怎么去检查?
  7. 烂泥:利用Diskgen找回分区破坏前的资料
  8. freeeim源码一个个投篮的命中
  9. matlab2c使用c++实现matlab函数系列教程-asin函数
  10. CYQ.Data 正式支持 DotNET Core 版本发布
  11. MATLAB——SRTM DEM显示
  12. matlab与数学模型相结合例题,数学知识、数学建模、现代数学软件关系 与结合...
  13. 手机技巧之扩展内存的检测以及修复。
  14. deepin mysql教程_deepin V20 安装 mysql 5.7 教程
  15. python三维图旋转_python中的三维图像旋转
  16. 利用HISTFILESIZE和HISTSIZE在ubunutu中调整命令行History的Size
  17. 将Ubuntu装入移动硬盘
  18. 某App逆向分析,破解提交参数
  19. android load BKS error: wrong version of key store
  20. win11 安装Subversion与配置 svn服务端

热门文章

  1. springMVC 注解 controller层的优化
  2. 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目技术对比(下)
  3. DevOps \u0026 SRE 必备技能清单
  4. java9系列(八)Multi-Release JAR Files
  5. Dubbo源码解析 --- DIRECTORY和ROUTER
  6. Hyper-V虚拟机快照占用磁盘空间过多,导致虚拟机不能启动怎么办
  7. Vert.x学习笔记(一) Vert.x 核心包
  8. Spring的控制反转(IOC)和依赖注入(DI)具体解释
  9. iOS--资源--优秀app发掘
  10. 〖Java〗Eclispe安装和使用viplugin