首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

从App的角度看进程和线程

在现在人人都有一部手机或电脑的年代,我们几乎天天都在使用各种app,如微信,QQ,抖音,优酷等等软件,表面上我们是与各种app交互,但如果站在操作系统的角度来看,其实我们每天都是在和各种进程或者线程打交道...到这里,我们在总结下进程和线程的定义: 进程:一个正在运行的程序实例,包含一个或多个线程,最少有一个线程线程:执行进程的一部分程序或者代码指令。 那么他们之间的区别和联系是什么?...(1)进程包含至少一个线程,果只有一个线程,这个线程通常叫做主线程线程是进程的一部分代码或者指令 (2)进程有独立的内存存储,线程共享进程的内存空间,此外线程有自己独立的的栈存储。...)进程有独立的signal信号,线程共享进程的signal信号 (7)进程相互之间不依赖,线程之间有依赖。...(8)进程不需要同步,线程一般需要同步 (9)进程是数据组织的概念,线程是cpu调度的概念 (10) 进程上下文切换慢,线程上下文切换快 最后还有一个问题,子进程与线程有什么关系?

38420

从源码的角度解析线程池运行原理

在讲解完线程池的构造参数和一些不常用的设置之后,有些同学还是想继续深入地了解线程池的原理,所以这篇文章科代表会带大家深入源码,从底层吃透线程池的运行原理。 ?...值一共有32位,其中高3位表示"线程池状态",低29位表示"线程池中的任务数量"。...// 如果有效线程数大于等于线程池所容纳的最大线程数(基本不可能发生),不能添加任务 // 或者有效线程数大于等于当前限制的线程数,也不能添加任务 // 限制线程数量有任务是否要核心线程执行决定...我们之前已经知道线程池中可维持corePoolSize数量的常驻核心线程,那么它们是如何保证执行完任务而不被线程池回收的呢?...并且获取当前工作线程大于corePoolSize,那么该线程是可以被超时回收的 // allowCoreThreadTimeOut默认为false,即默认不允许核心线程超时回收 // 这里也说明了在核心线程以外的线程都为

45920

从源码的角度解析线程池运行原理

在讲解完线程池的构造参数和一些不常用的设置之后,有些同学还是想继续深入地了解线程池的原理,所以这篇文章科代表会带大家深入源码,从底层吃透线程池的运行原理。 ?...值一共有32位,其中高3位表示"线程池状态",低29位表示"线程池中的任务数量"。...// 如果有效线程数大于等于线程池所容纳的最大线程数(基本不可能发生),不能添加任务 // 或者有效线程数大于等于当前限制的线程数,也不能添加任务 // 限制线程数量有任务是否要核心线程执行决定...我们之前已经知道线程池中可维持corePoolSize数量的常驻核心线程,那么它们是如何保证执行完任务而不被线程池回收的呢?...并且获取当前工作线程大于corePoolSize,那么该线程是可以被超时回收的 // allowCoreThreadTimeOut默认为false,即默认不允许核心线程超时回收 // 这里也说明了在核心线程以外的线程都为

50430

「前端进阶」从多线程角度来看 Event Loop

对很多初学JS的人来说,根本搞不清楚单线程的JS为什么拥有 异步的能力,所以,我试图从 进程、 线程角度来解释这个问题。 CPU ? 算机的核心是 CPU,它承担了所有的计算任务。...线程 ? 个车间里,可以有很多工人,共享车间所有的资源,他们协同完成一个任务。 线程就好比车间里的工人,一个 进程可以包括多个 线程,多个 线程共享 进程资源。...GUI渲染线程 负责渲染页面,布局和绘制 页面需要重绘和回流时,该线程就会执行 与js引擎线程互斥,防止渲染结果不可预期 JS引擎线程 负责处理解析和执行javascript脚本程序 只有一个JS引擎线程...setInterval与setTimeout所在的线程 定时任务并不是由JS引擎计时的,是由定时触发线程来计时的 计时完毕后,通知事件触发线程 异步http请求线程 浏览器有一个单独的线程用于处理AJAX...请求 当请求完成时,若有回调函数,通知事件触发线程 当我们了解了渲染进程包含的这些线程后,我们思考两个问题: 为什么 javascript 是单线程的 为什么 GUI 渲染线程与 JS 引擎线程互斥 为什么

63810

不堆概念、换个角度聊多线程并发编程

作为提升吞吐性能的不二良方,下面我们就一起来尝试按照问题解决型的思路一步步推进,换个角度探讨下多线程并发相关的内容,全面了解下多线程并发世界的各种关联,进而更从容优雅的让并发为我们所用,成为我们提升系统性能的神兵利器...、销毁线程的操作属于一种消耗性能的操作,而且创建线程的数量不可控。...定时器也是在子线程中执行的,多个定时器之间、定时器线程与主线程之间、定时器线程与业务子线程之间都会以多线程的形式并发处理。 @Scheduled(cron = "0 0/10 * * * ?")...可以看下下面的示意图,4个线程请求同一锁时,其中1个线程可以抢到锁,其余三个线程将处于等待;而将锁拆分为3个子锁的时候,这样4个线程中只有1个线程处于等待: image.png 上面演示的就是分段锁的概念...拿线程池举个例子: 既然是为每个线程拷贝一份独立的副本,对于同一个线程而言拿到的数据是同一个,那么对于使用线程池来处理多任务的场景,线程都是重复利用的,这样会导致同一个线程中正在处理的任务可能会拿到上一个任务设置的共享值

24520

从源码角度剖析Android系统EGL及GL线程

从事OpenGL ES相关开发的技术人员,常常会对一些问题感到困惑,例如GL线程究竟是什么?为什么在这个GL线程申请的texture不能在另外一个GL线程使用?如何打破这种限制等。...(2)texture所占用的空间是跟GL线程绑定的吗? (3)为什么通常一个GL线程的texture等数据,在另一个GL线程没法用?...(6)将渲染环境设置到当前线程 ? 这段代码的作用是将渲染环境设置到当前线程,相当于让当前线程拥有了Open GL的绘图能力,为什么做了这步操作,线程就拥有了Open GL的绘图能力?后面会讲解。...答:跟EGL Context绑定,本质上与线程无关 3)为什么通常一个GL线程的texture等数据,在另一个GL线程没法用?...答:在一个线程中调用eglCreateContext()里传入另一个线程的EGL Context作为share context,或者先让一个线程解绑EGL Context,再让另一个线程绑定这个EGL

6.5K122

从JVM角度解析Java是如何保证线程安全的

文章已同步至GitHub开源项目: JVM底层原理解析 从JVM角度解析Java是如何保证线程安全的 线程安全 ​ 当多个线程同时访问一个对象,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要考虑额外的同步...Java中的线程安全 ​ 在Java语言中,从JVM底层来看的话,线程安全并不是一个非黑即白的二元排他选项,按照安全程度来划分,我们可以将Java中各种操作共享的数据分为五类:不可变、绝对线程安全、相对线程安全...、线程兼容、线程对立 ​ 接下来,我们一一介绍。...特征: 可重入的,同一条线程进入同步块多次也不会被锁死。 在同步块中执行的线程会无条件的阻塞其他线程的进入。这意味着无法像处理数据库那样强制让已获取锁的线程释放锁,也无法让正在的等待锁的进程退出。...如果锁已被其他线程获取,则进行等待。 void lock(); //如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态。

55541

从 Hotspot 虚拟机角度来分析 Java 线程启动

基本概念 Java 线程其实是映射到操作系统的内核线程上的,所以 Java 线程基本上也就是操作系统在进行管理。...在 Linux系统中,线程和进程用的是同一个结构体进行描述的,只不过进程拥有自己独立的地址空间,而同一个进程的多个线程之间是共享资源的。...简单说明:本文基于 openjdk 1.8 进行 线程状态 每种线程状态的切换条件, 以及调用方法如下图所示 : 线程具有以下几种状态 Java 的线程状态在 Thread.State 枚举中定义代码如下...Java 创建线程 Thread 实例之后,是通过 start 方法进行启动该线程,通知执行。...(size_t) size : 0; // 虚拟机创建 JavaThread, 该类内部会创建操作系统线程,然后关联 Java 线程 native_thread = new

22520

不一样的角度一窥多线程

不一样的角度一窥多线程 最近在性能调试时,发现了一个有趣的现象,我把代码简化后如下....用户级线程与内核级线程 线程主要有以下两种实现方式- 用户级线程 -用户托管线程。 内核级线程 -作用在内核(操作系统核心)上的操作系统管理的线程。 ?...以下是用户级线程与内核级线程的对比. 用户级线程 内核级线程 用户线程由用户实现。 内核线程由OS实现。 操作系统无法识别用户级线程。 内核线程被操作系统识别。 用户线程的实现很容易。...用户级线程模型 通常,内核级线程可以使用三个模型之一来执行用户级线程。...Many-to-one 多对一模型将许多用户级线程映射到一个内核级线程线程管理是通过线程库在用户空间中完成的。当线程进行阻塞的系统调用时,整个过程将被阻塞。

35720

从JVM角度解析Java是如何保证线程安全的

文章已同步至GitHub开源项目: JVM底层原理解析 从JVM角度解析Java是如何保证线程安全的 线程安全 ​ 当多个线程同时访问一个对象,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要考虑额外的同步...Java中的线程安全 ​ 在Java语言中,从JVM底层来看的话,线程安全并不是一个非黑即白的二元排他选项,按照安全程度来划分,我们可以将Java中各种操作共享的数据分为五类:不可变、绝对线程安全、相对线程安全...、线程兼容、线程对立 ​ 接下来,我们一一介绍。...特征: 可重入的,同一条线程进入同步块多次也不会被锁死。 在同步块中执行的线程会无条件的阻塞其他线程的进入。这意味着无法像处理数据库那样强制让已获取锁的线程释放锁,也无法让正在的等待锁的进程退出。...如果锁已被其他线程获取,则进行等待。 void lock(); //如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态。

91631

站在架构的角度思考线程池的设计和原理

站在架构的角度思考线程池的设计和原理 简介 线程线程池设计猜想 源码分析 execute addWorker Worker.start() runWorker getTask 线程池配置 线程数量设置...Thread().start(); 线程的频繁创建和销毁 线程的数量过多,会造成 CPU 资源的开销 线程上下文频繁切换,消耗 CPU 资源 那么如何实现线程的复用呢?...有任务要执行的时候,从线程池中取出线程来执行 没有任务的时候,线程放回线程线程池设计猜想 目标:实现线程的重复使用. 分解: 如何线程的复用? 那如何让线程执行新的任务呢?...结论:通过阻塞队列的方式,来实现线程池中线程的复用。 线程池的实现原理的过程推演 源码分析 线程池中的核心线程是延迟初始化的。 先初始化核心线程。 调用阻塞队列的方法,把task存进去。...false,增加工作线程(非核心线程) 如果添加失败,说明当前的工作线程数量达到了最大的线程数,直接调用拒绝策略。

40421

图解并发与并行-分别从CPU和线程角度理解

本文作为图解java并发编程的第三篇,前2篇访问地址如下所示: 图解进程线程、互斥锁与信号量-看完还不懂你来打我 8成以上的java线程状态图都画错了--图解java并发第二篇 一、CPU角度的并发与并行...我们的计算机在绝大部分时间都运行很多很多的进程与线程,所以CPU并发执行并切换分配CPU时间片资源是一种常态。只是CPU的执行速度实在是太快了,快到绝大部分情况下你都无法感知“执行线程的切换”。...二、线程角度的并发与并行 上面的并发与并行的解释更多的是从CPU运行的角度,但作为程序员更关心的是作为开发者如何区分并发与并行。...从线程角度去谈并行,通常是指在多线程间不存在数据共享或通信,能够利用CPU的并行能力去运行多线程。 ?...从线程角度去谈并发,通常是指多个线程之间存在资源共享(内存、代码段等),彼此协调共享资源的使用,从而交出或获得CPU执行时间片的使用权。 ?

50733
领券