线程知识点(一)

2024-06-23 23:20
文章标签 知识点 线程

本文主要是介绍线程知识点(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、线程是什么?
  • 二、进程与线程的关系
  • 三、种类
    • 内核级线程
    • 用户级线程
    • 混合型线程
  • 总结


一、线程是什么?

线程是程序最基本的运行单位,真正运行的是进程中的线程。

线程是大多数操作系统支持的调度单位, 执行单元,某些系统不支持线程技术。
是允许应用程序并发执行多个任务的一种机制,同一程序中的所有线程均会独立执行相同程序。
共享同一份全局内存区域,其中包据初始化数据段、未初始化数据段以及堆内存段。

二、进程与线程的关系

  1. 一般情况下进程包含线程, 线程比进程更轻量(体积更小,开销更小)
  2. 线程是最小的调度单位,进程是最小的分配资源单位(主要指内存资源),进程也是一种调度单位。
  3. 在多线程模型中要避免进程退出,否则多线程也会终止, 因为进程是线程的容器
  4. 线程创建于进程中,于进程共享资源,线程用进程的内存资源,完成特定任务,如果在意内存开销 ,使用多线程技术是一个很好的选择
  5. 线程就是寄存器和栈 (线程可以占用时间片使用cpu,可以通过保存和回复处理器现场避免寄存器冲突, 所以线程是一个合格的调度单位)
  6. 进程创建过程中需要资源管理、而线程不涉及,而是共享(栈独自占用)
    仅有计数器,少量寄存器和栈,其余堆,变量,指针,引用,文件等共享(传递效率高)
  7. 线程能减少并发执行时间和空间开销:因为线程具有相问的地址空间,则切换时候不需要切换页表

三、种类

内核级线程

系统支持的线程,可以为其分配内核对象,与进程一样获取cpu
可以得到更多系统资源, 缩短任务完成时间,所有的线程资源分配,访问和切换都要系统干预,开销较大

用户级线程

系统无法识别用户级线程,无法将资源分发给普通线程
如果主线程sleep(0)了,根据就近原则可以给相邻线程资源
普通线程虽然无法被系统直接分发资源, 但是它可以使用cpu,只要主线程释放交换给他即可
用户线程是安装在进程用户空间的,所以完成线程切换或访问线程资源在用户空间即可完成,无需系统干预

混合型线程

可以为线程分配内核对象,得到更多的时间片,线程安装在用户层, 较少线程调度开销
混合型线程支持的系统比较少


总结

这就是我大概的理解,线程与进程都是很重要的知识点!

这篇关于线程知识点(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088567

相关文章

嵌入式软件工程师应聘知识点

嵌入式软件工程师应聘 修改浏览权限 | 删除 数据结构(C语言)部分常考的知识点: 1、局部变量能、全局变量和静态变量 2、堆和栈 3、Const、volatile、define、typedef的用途 4、链表(比如链表的插入、删除和排序) 5、排序(考查冒泡法的较多) 6、可重入函数 、malloc函数 7、指针(常考函数指针,函数指针,数组指针,指针数组和

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

Java线程面试题(50)

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程,

线程池ThreadPoolExecutor类源码分析

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。   那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?

线程Lock

线程Lock   在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。   也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从s

线程封装,互斥

文章目录 线程封装线程互斥加锁、解锁认识接口解决问题理解锁 线程封装 C/C++代码混编引起的问题 此处pthread_create函数要求传入参数为void * func(void * )类型,按理来说ThreadRoutine满足,但是 这是在内类完成封装,所以ThreadRoutine函数实际是两个参数,第一个参数Thread* this不显示 解决方法: 第

Linux-笔记 线程同步机制

目录 前言 实现 信号量(Semaphore) 计数型信号量 二值信号量  信号量的原语操作 无名信号量的操作函数 例子 互斥锁(mutex) 互斥锁的操作函数 例子 自旋锁 (Spinlock) 自旋锁与互斥锁的区别 自旋锁的操作函数 例子 前言         线程同步是为了对共享资源的访问进行保护,确保数据的一致性,由于进程中会有多个线程的存在,

jmeter之Thread Group(线程组)

Thread Group(线程组) 1.线程组,或者可以叫用户组,进行性能测试时的用户资源池。 2.是任何一个测试计划执行的开始点。 3.上一篇提到的“控制器”和“HTTP请求”(采集器)必须在线程组内;监听器等其他组件,可以直接放在测试计划下。 线程组设置参数的意义 我们以下图为例,进行详细说明。见下图:  区域1(在取样器错误后要执行的动作) 这个区域的主要作用很明显,在线程内

如何在Android中实现多线程与线程池?

目录 一、Android介绍二、什么是多线程三、什么是线程池四、如何在Android中实现多线程与线程池 一、Android介绍 Android是一种基于Linux内核的开源操作系统,由Google公司领导开发。它最初于2007年发布,旨在为移动设备提供一种统一、可扩展的操作系统。Android系统以其高度的可定制性和丰富的应用生态而受到广泛欢迎,如今已经成为全球最流行的

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2  互斥 2.1 何为互斥?         互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢到资源,它可以访问这个变量,没有争抢到资源的线程不能够访问这个变量。那这种只有一个线程能够访问到这个变量的现象称之为线程间互斥。 2.2互斥锁API 1.