1、什么是进程?
进程是程序的而一次动态执行过程。
2、什么是线程?
个进程内部的控制序列, 是进程的一个实体,是进程的一条执行路径。程也就是一个轻量级进程(仅仅是在linux系统中。在windows系统中,进程就是经常进程,线程就是线程),每个线程都有自己的线程控制块,即一个进程至少有一个轻量级进程。
在线程组里面,所有的线程都是对等的关系,没有父线程的概念。
3、什么是主线程?
主线程就是创建进程中产生的第一个线程,也就是main函数对应的线程。
4、线程ID
线程是一个轻量级进程,每一个用户态的线程 ,在内核中都对应这一个调度实体,也拥有着自己 的进程描述符。
tgid:线程组ID,线程组中的每一个线程的tgid都是相同的,在外表现为进程ID,它等于主线程的ID 。
tid:每一个线程在自己的用户层面上都有一个私有的pid,可以通过tid找到自己的虚拟地址,再通过页表映射到物理地址空间。在用户层面上展现的是线程的ID(tid),但在内核中它实际上是一个轻量级进程(pid)。


5、线程资源?
进程可以拥有资源,并且是系统拥有资源的基本单位 。线程本身并不拥有系统资源,仅有一些 能保证独立运行 的资源,这块资源的各个线程私有的。
1)线程各自独立拥有的部分:

  • 线程ID
  • 一组寄存器
  • errno(错误编码)
  • 信号屏蔽字(一个进程中pending(未决)信号只有一个,但是任意一个线程都可以处理这个信号)
  • 调度优先级

    2)共享区域

  • 同一个地址空间(代码、全局数据、堆都是共享的。如果定义一个函数,在每个线程中都可以共享到,如果定义一个全局变量,在任何一个线程中都可以访问到
  • 文件描述符表
  • 每种信号的处理方式
  • 当前工作目录
  • 用户ID和组ID

6、线程的优点

  • 创建一个新线程的代价要比创建一个新进程小的多
  • 线程之间的切换相较于进程之间的切换需要操作系统做的工作很少
  • 线程占用的资源要比进程少很多
  • 能充分利用多处理器的可并行数量
  • 等待慢速 IO操作结束以后,程序可以执行其他的计算任务
  • 计算(CPU)密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
  • IO密集型应用,为了提高性能,将IO操作重叠,线程可以等待不同的IO操作。

7、线程的缺点?

  • 性能损失( 一个计算密集型线程是很少被外部事件阻塞的,无法和其他线程共享同一个处理器,当计算密集型的线程的数量比可用的处理器多,那么就有可能有很大的性能损失,这里的性能损失是指增加了额外的同步和调度开销,二可用资源不变。)
  • 健壮性降低(线程之间是缺乏保护性的。在一个多线程程序里,因为时间上分配的细微差距或者是共享了一些不应该共享的变量而造成不良影响的可能影响是很大的。)
  • 缺乏访问控制( 因为进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响 。)
  • 编程难度提高(编写和 调试一个多线程程序比单线程困难的多。)

8、进程和线程的区别?

  • 调度 :进程是操作系统分配资源的一个基本单位。线程是 CPU调度的基本单位。
  • 并发性:引入线程之后,不仅进程之间是可以并发执行的,而且在一个进程之中的多个线程也是 可以并发执行的,甚至是允许一个进程中 的全部进程并发执行。同样,不同的进程中的线程也是可以并发执行的。使得OS有 更好的并发性,提高了资源的利用率和系统吞吐量。
  • 拥有资源:进程可以拥有资源,并且是系统拥有资源的基本单位 。线程本身并不拥有系统资源,仅有一些 能保证独立运行 的资源,这块资源的各个线程私有的。例如,线程ID、一组寄存器、栈、errno、信号屏蔽字(一个进程中pending信号只有一个,但是任意一个线程都可以处理这个信号)、调度优先级。
  • 独立性:在同一进程中线程的独立性要比在不同的进程中独立性要低很多 。
  • 系统开销:线程切换的开销低于进程切换的开销,
  • 支持多处理机系统:对于传统的进程,也就是单线程进程 ,不管有多少个处理机,进程只能运行在同一个 处理机上面,但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上面,使其并发执行,加速了进程的完成。

9、进程和线程的应用场景?

总而言之:

  • 需要频繁创建销毁优先使用线程。
  • 需要大量计算的优先使用线程。
  • 相关性较强的使用线程,相关性较弱使用进程。
  • 可能要扩展到多机分布使用进程,多核分布使用线程

什么是线程?线程的优缺点和使用场景。相关推荐

  1. 020.day20 线程概述 多线程优缺点 线程的创建 线程常用方法 生命周期 多线程同步...

    目录 多线程 一.线程概述 四.线程常用方法 多线程 一.线程概述 1. 进程 正在执行的应用程序(java.exe),一个可执行的程序一次运行的过程 独立性:不同进程之间相互独立 动态性:是一直活动 ...

  2. java 线程池概念、优缺点、应用场景

    概念  为什么使用线程池 使用线程池最大的原因就是可以根据系统的需求和硬件环境灵活的控制线程的数量,且可以对所有的线程进行统一的管理和控制,从而提高系统的运行效率,降低系统运行压力:当然了,使用线程池 ...

  3. JUC线程线程池和锁面试题

    线程基础知识 并发编程的优缺点 为什么要使用并发编程(并发编程的优点) 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发 ...

  4. 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )

    文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...

  5. 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁...

    线程(from threading import Thread):CPU调度的最小单位 线程的两种创建方式:方式一: 1 from threading import Thread 2 def f1(i ...

  6. java 线程一直运行状态_详解JAVA 线程-线程的状态有哪些?它是如何工作的?

    线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在. 一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源.更加轻量化,也因 ...

  7. 并发编程——线程——线程的理论和创建以及守护线程

    一.什么是线程 线程是操作系统能够进行运算调度的最小单位. 它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任 ...

  8. java线程——中断线程+线程状态+线程属性(优先级)

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java线程--中断线程+线程状态+线程属性(优先级) 的相关知识: [1]中断线程 1.1 ...

  9. linux 下的进程创建线程,Linux线程 之 线程 线程组 进程 轻量级进程(LWP)

    线程是有栈的,我们知道,普通的一个进程,它的栈空间是8M,我们可以通过ulmit -a查看: stack size (kbytes, -s) 8192 线程也不例外,线程也是需要栈空间的这句话是废话, ...

  10. 什么是线程线程和进程的区别

    什么是线程线程和进程的区别 线程是进程的一个实体,是cpu调度和分派的基本单位,比进程小可以独立运行的基本单位 一个进程包含多个线程具有独立功能的程序是操作系统进行资源分配和调度的一个独立单位

最新文章

  1. Hexo 个人博客 SEO 优化(3):改造你的博客,提升搜索引擎排名
  2. 关于python知识点的blog
  3. 你写的前端到底用没用到这些
  4. 21.println输出打印.rs
  5. 假期周进度总计(四)
  6. mysql自增id获取失败
  7. 类与类关系的UML图与代码表现
  8. matlab怎么相加相同id的几行,matlab几个有用的技巧
  9. Linux 网络编程 常用socket函数详解 常用的函数讲解
  10. Output Arcade for Mac:集合大量 Loop 素材的素材库插件
  11. DNS在什么情况下才能动态更新|活动目录集成的dns区域
  12. Windows内核编程(五)-驱动的调试
  13. 自定义数字时钟DigitalClockView
  14. Excel的格式类型
  15. Structured Streaming任务GC问题
  16. h5底部输入框被键盘遮挡_总结几个移动端H5软键盘的大坑【实践】
  17. MySQL索引(漂亮简洁的思维导图)
  18. 解决导出为Excel时文件名乱码的问题。
  19. oracle系统漏洞绿盟,【处置建议】Oracle WebLogic反序列化漏洞(CVE-2018-2628)安全处置建议...
  20. python中怎么编写程序_python写完程序怎么运行

热门文章

  1. JavaScript 高级编程(二)
  2. Android 关于RemoteViews的理解(二)
  3. 点餐系统架构模型_点餐系统的设计与实现.doc
  4. 线性表 (一) 线性表定义与线性表插入与删除
  5. windows程序和控制台程序
  6. Ubuntu-18.04版本网络配置,连接网络的方法
  7. atan、atanf、atanl、atan2、atan2f、atan2l
  8. 微信小程序漏洞:可下载任意微信小游戏源代码
  9. easyui datagrid-detailview 嵌套高度自适应
  10. GCN-LSTM预测道路交通车辆速度 英文 Vehicle Speed Forecasting Based On GCN-LSTM Combined Model