精华内容
下载资源
问答
  • 线程,进程,CPU时间片
    千次阅读
    2019-09-18 13:21:17

    线程是CPU调度的基本单位

    进程是CPU分配资源的基本单位

    CPU时间片是直接分配给线程的,线程拿到CPU时间片就能执行了

    CPU时间片不是先分给进程然后再由进程分给进程下的线程的。

    所有的进程并行,线程并行都是看起来是并行,其实都是CPU片轮换使用。

    线程分到了CPU时间片,就可以认为这个线程所属的进程在运行,这样就看起来是进程并行。

    线程也一样。

    更多相关内容
  • 多线程的总结(上)

    2020-12-21 09:57:48
    多线程是什么? 概念: 一个java程序是由多个线程共同组成的,我们在学习多线程之前,主方法就是一个线程(main线程),而垃圾回收机制实质上也是一个线程,我们在写程序的时候垃圾回收机制在后台一直运行着,和主线程...
  • Java线程的CPU时间片

    千次阅读 2018-04-29 10:04:17
    Java中线程会按优先级分配CPU时间片运行,那么线程什么时候放弃CPU的使用权?可以归类成三种情况: 当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说...

    Java中线程会按优先级分配CPU时间片运行,那么线程什么时候放弃CPU的使用权?可以归类成三种情况:

    1. 当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说放弃本次时间片的执行权),例如调用yield()方法。

    2. 当前运行线程因为某些原因进入阻塞状态,例如阻塞在I/O上。

    3. 当前运行线程结束,即运行完run()方法里面的任务。

    三种情况中第三种很好理解,任务执行完了自然放弃CPU,前两种情况用两个例子说明,先看使用yield放弃CPU什么情况:

    public class YeildThread {
     public static void main(String[] args) {
         MyThread mt = new MyThread();
         mt.start();
         while (true) {
             System.out.println("主线程");
         }
     }
    }
    class MyThread extends Thread {
     public void run() {
         while (true) {
             System.out.println("被放弃线程");
             Thread.currentThread().yield();
         }
     }
    }

    截取某段输出如下,输出“主线程”比“被放弃线程”运行的机会多,因为mt线程每次循环都把时间片让给主线程,正是因为yield操作并不会永远放弃CPU,仅仅只是放弃了此次时间片,把剩下的时间让给别的线程,

    主线程
    主线程
    主线程
    主线程
    主线程
    主线程
    被放弃线程
    主线程
    主线程
    主线程
    主线程
    主线程
    主线程
    主线程

    第二个例子为节省代码量将使用伪代码表示,例子简单但已能说明问题,运行程序将有两条线程工作,ioThread每次遇到I/O阻塞就放弃当前的时间片,而主线程则按JVM分配的时间片正常运行。

    public class IOBlockThread {
     public static void main(String[] args) {
         IOThread ioThread = new IOThread();
         ioThread.start();
         主线程任务执行
     }
    }
    class IOThread extends Thread {
     public void run() {
         while (true) {
             I/O阻塞
         }
     }
    }

    Java的线程的调度机制都由JVM实现,假如有若干条线程,你想让某些线程拥有更长的执行时间,或某些线程分配少点执行时间,这时就涉及“线程优先级”,Java把线程优先级分成10个级别,线程被创建时如果没有明确声明则使用默认优先级,JVM将根据每个线程的优先级分配执行时间的概率。有三个常量Thread.MIN_PRIORITY、Thread.NORM_PRIORITY、Thread.MAX_PRIORITY分别表示最小优先级值(1)、默认优先级值(5)、最大优先级值(10)。

    由于JVM的实现以宿主操作系统为基础,所以Java优先级值与各种不同操作系统的原生线程优先级必然存在某种映射关系,这样才足以封装所有操作系统的优先级提供统一优先级语义。例如1-10优先级值在linux可能要与0-99优先级值进行映射,而windows系统则有7个优先级要映射。

    线程的调度策略决定上层多线程运行机制,JVM的线程调度器实现了抢占式调度,每条线程执行的时间由它分配管理,它将按照线程优先级的建议对线程执行的时间进行分配,优先级越高,可能得到CPU的时间则越长。

    ————-推荐阅读————

    我的2017文章汇总——机器学习篇

    我的2017文章汇总——Java及中间件

    我的2017文章汇总——深度学习篇

    我的2017文章汇总——JDK源码篇

    我的2017文章汇总——自然语言处理篇

    我的2017文章汇总——Java并发篇


    跟我交流,向我提问:

    这里写图片描述

    公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

    为什么写《Tomcat内核设计剖析》

    欢迎关注:

    这里写图片描述

    展开全文
  • Java线程何时放弃CPU时间片

    千次阅读 2020-01-11 11:30:41
    每个线程从启动到结束的过程中可能经历多种状态,线程则意味着并发,而并发则涉及CPU的执行时间片。下图是三个线程分配到的CPU执行时间示意图,从启动到结束三个线程除了真正执行阶段,还包含了等待阶段。 执行...

    跟着作者的65节课彻底搞懂Java并发原理专栏,一步步彻底搞懂Java并发原理。

    作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、架构、分布式、高并发、大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java、Python和C++。平时喜欢看书、写作和运动,擅长篮球、跑步、游泳、健身和羽毛球等运动项目。崇尚开源,崇尚技术自由,更崇尚思想自由。出版书籍:《Tomcat内核设计剖析》、《图解数据结构与算法》、《人工智能原理科普》。

    线程与CPU执行

    Java中内置支持在一个进程中运行多个线程,线程的执行由JVM进行管理。每个线程从启动到结束的过程中可能经历多种状态,多个线程则意味着并发,而并发则涉及CPU的执行时间片。下图是三个线程分配到的CPU执行时间示意图,从启动到结束三个线程除了真正执行阶段,还包含了等待阶段。

    线程并发执行

    执行时间

    一个线程从启动到结束过程总,有两个时间概念我们要理解。其一是CPU时间,即线程真正执行的时间。其二是总消耗时间,即真正执行的时间加上等待的时间。如下图可以很清晰看到这两者的关系,P1得到了多个CPU执行时间,而总消耗时间则包括P1执行期间CPU分配给其它线程执行的时间,所以总

    展开全文
  • 对于一个已经竞争到同步锁的线程,在还没有走出同步块的时候,即使时间片结束也不会释放锁。 另外,对于通过调用sleep或wait,notify方法主动挂起线程的情况: 通过sleep,notify方式也是不会释放同步锁的,而wait,...

    对于一个已经竞争到同步锁的线程,在还没有走出同步块的时候,即使时间片结束也不会释放锁。
    另外,对于通过调用sleep或wait,notify方法主动挂起线程的情况:
    通过sleep,notify方式也是不会释放同步锁的,而wait,notify并不释放锁,只是告诉调用过wait方法的线程可以去参与获得锁的竞争了是会释放锁的,
    通过下面一个简单的例子可以看出:

    
    
    public class TestThread {
    	
    	private byte[] tlock = new byte[0];
    	
    	public void testSyn() {
    		Thread t1 = new Thread(new TestRunable(tlock));
    		Thread t2 = new Thread(new TestRunable(tlock));
    		t1.start();
    		t2.start();
    	}
    
    	public static void main(String[] args) {
    		new TestThread().testSyn();
    	}
    	
    	
    	class TestRunable implements Runnable{
    		
    		private byte[] lock;
    		
    		public TestRunable(byte[] lock) {
    			this.lock = lock;
    		}
    
    		@Override
    		public void run() {
    			synchronized(lock){
    				
    				for(int i=0;i<10;i++) {
    					System.out.println(Thread.currentThread().getName());
    					try {
    						Thread.sleep(1000);
    						/*lock.notify();
    						if(i<9) {
    							lock.wait();
    						}*/
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    					
    				}
    			}
    			
    		}
    		
    	}
    
    }
    

     

    展开全文
  • Java多线程,Android多线程

    千次阅读 2022-03-12 08:10:27
    很多多线程都是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器,如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错觉。...
  • 进程-线程-多线程 1、进程(process) 狭义定义:进程就是一段程序的执行过程 简单的来讲进程的概念主要有两点: 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)...
  • Java多线程超详解

    万次阅读 多人点赞 2019-06-11 01:00:30
    随着计算机的配置越来越高,我们需要将进程进一步优化,细分为线程,充分提高图形化界面的多线程的开发。这就要求对线程的掌握很彻底。 那么话不多说,今天本帅将记录自己线程的学习。 线程的相关API //获取当前...
  • 学无止境环境线程时间片分配线程的执行进程的状态三个状态状态的迁移 环境 无特殊指明,本文基于linux 线程时间片分配 对linux系统来说,用户创建进程后,CPU分配时间片的单位其实是按线程分的。假如你的程序里...
  • 1.这是不是就意味着尽量使用多线程并发,这样可以抢到更多的时间片。 理论上是的,多线程的一种用途就是能同时做好几件事情,以提高效率。但实际问题是,CPU的数量(核心数,下同)是有限的,而且并不多。如果你的.
  • 基于OSS文件多线程上传及进度条实现

    千次阅读 热门讨论 2019-04-14 20:13:49
    AliyunOSSUtil类,上传文件操作,文件分上传,多线程 @Component public class AliyunOSSUtil { @Autowired private ConstantConfig constantConfig; private static final org.slf4j.Logger logger= ...
  • 万字图解Java多线程

    万次阅读 多人点赞 2020-09-06 14:45:07
    java多线程我个人觉得是javaSe中最难的一部分,我以前也是感觉学会了,但是真正有多线程的需求却不知道怎么下手,实际上还是对多线程这块知识了解不深刻,不知道多线程api的应用场景,不知道多线程的运行流程等等,...
  • 发送端 采用多线程发送 package com.controller; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.concurrent....
  • 一文详解C++多线程

    千次阅读 多人点赞 2021-04-16 08:40:27
    传统的C++(C++11之前)中并没有引入线程这个概念,在C++11出来之前,如果我们想要在C++中实现多线程,需要借助操作系统平台提供的API,比如Linux的,或者windows下的<windows.h> 。C++11提供了语言层面上的多线程,...
  • Go学习笔记—多线程

    千次阅读 2021-12-01 10:27:19
    多线程编程 ​ 一个进程可以包含多个线程,这些线程运行的一定是同一个程序(进程==程序),且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位,线程是调度运行的基本单位,线程...
  • 多线程带来的问题 为什么需要多线程 其实说白了,时代变了,现在的机器都是多核的了,为了榨干机器最后的性能我们引入单线程。 为了充分利用CPU资源,...而 CPU 是通过时间片算法来执行任务的,不同的线程活跃状态不同
  • 多线程 什么是线程和进程?他们是什么关系? 进程:在操作系统中能够独立运行,并且作为资源分配的基本单位。它表示运行中的程序。系统运行一个程序就是一个进程从创建、运行到消亡的过程。 线程:是一个比进程更小的...
  • 线程概述 线程的创建 1. 继承Thread类 2. 实现Runnable接口 3. 实现Callable接口 4. 使用线程池 线程的调度 线程的生命周期 线程同步 1. 方法一:同步代码块 2. 方法二:同步方法 3. 方法三:Lock(锁): 4. 对比三种...
  •   来自百度百科   时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU...
  • 多线程面试题(值得收藏)

    万次阅读 多人点赞 2019-08-16 09:41:18
    史上最强多线程面试47题(含答案),建议收藏 金九银十快到了,即将进入找工作的高峰期,最新整理的最全多线程并发面试47题和答案总结,希望对想进BAT的同学有帮助,由于篇幅较长,建议收藏后细看~ 1、并发编程三要素?...
  • Python中的鸡肋多线程

    千次阅读 2021-02-03 10:42:55
    在介绍Python中的线程之前,先明确一个问题,Python中的多线程是假的多线程! 为什么这么说,我们先明确一个概念,全局解释器锁(GIL)。Python代码的执行由Python虚拟机(解释器)来控制。Python在设计之初就考虑要在主...
  • 多线程,到底该设置多少个线程?

    千次阅读 2019-06-02 13:26:30
    为了让用户感觉这些任务正在同时进行,操作系统利用了时间片轮转的方式,CPU给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一任务。任务的状态保存及再加载,这段...
  • Java多线程面试题(面试必备)

    万次阅读 多人点赞 2020-05-26 01:15:38
    文章目录一、多线程基础基础知识1. 并发编程1.1 并发编程的优缺点1.2 并发编程的三要素1.3 并发和并行有和区别1.4 什么是多线程多线程的优劣?2. 线程与进程2.1 什么是线程与进程2.2 线程与进程的区别2.3 用户线程...
  • Linux C实现用户态协作式多线程

    千次阅读 多人点赞 2019-04-30 23:01:15
    最简单的情况,以基于时间片的调度为例,以下是执行抢占的最佳时机: 当前指令流执行了太久,其它等待的指令流过于饥饿的时候; 有更加紧急的指令流刚刚就绪的时候。 我们知道,在我们熟知的几个现代操作...
  • 多线程常见的面试题

    千次阅读 2020-09-16 16:21:58
    多线程常见的面试题: 1. 什么是线程和进程? 线程与进程的关系,区别及优缺点? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 ...
  • 单核多线程与多核多线程

    万次阅读 多人点赞 2018-09-29 17:20:33
    单核多线程与多核多线程 或许有些同学对于单核多线程和多核多线程有点误区,因为会听到一些同学问为什么单核能处理多线程,总结了一些...单核多线程指的是单核CPU轮流执行多个线程,通过给每个线程分配CPU时间片来实...
  • 线程、进程、多线程、多进程 和 多任务 小结

    千次阅读 多人点赞 2019-04-20 11:59:56
    4 多线程 5 线程与进程的关系 6 线程和进程的区别 7 进程的优缺点 7.1 进程的优点 7.2 进程的缺点 8 线程的优缺点 8.1 线程的优点 8.2 线程的缺点 9 多线程的优缺点 9.1 多线程的优点 9.2 多线程的缺点 ...
  • JAVA多线程是什么

    千次阅读 2020-08-31 23:53:23
    一、 什么是多线程: 我们现在所使用操作系统都是多任务操作系统(早期使用的DOS操作系统为单任务操作系统),多任务操作指在同一时刻可以同时做多件事(可以同时执行多个程序)。 多进程:每个程序都是一个进程,在操作...
  • 易语言大漠多线程创建线程

    千次阅读 2020-05-30 09:22:19
    进程(process)和线程(thread)是操作系统的基本概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一...同一个进程中的线程之间可以并发执行 第一课易语言大

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,983
精华内容 65,193
关键字:

时间片多线程