Java并发篇_进程线程

一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。

多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。

一、进程

1、什么是进程

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

2、进程的特点

  • 进程是程序的一次执行过程。
  • 进程是是正在运行程序的抽象。它代表运行的CPU,也称进程是对CPU的抽象。
  • 系统资源(如内存、文件)以进程为单位分配。
  • 操作系统为每个进程分配了独立的地址空间
  • 操作系统通过“调度”把控制权交给进程。

二、线程

1、什么是线程

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

线程由线程ID,程序计数器(PC)[用于指向内存中的程序指令],寄存器集合[由于存放本地变量和临时变量]和堆栈[用于存放方法指令和方法参数等]组成。

2、为什么引入线程

主要归咎于两点. 一个是由实现决定的,一个是由需求决定的.

  1. 进程是资源调度的单位, 因此进程之间的切换的代价和开销比较大.
  2. 一个进程内可能需要多任务并发的执行,实现不同的功能.

3、进程与线程的区别

  1. 进程是拥有系统资源的,系统会给进程分配一个完整的虚拟地址空间.(不同进程无法共享相同的内存空间)
  2. 线程除了少量必要的资源外(存放本地变量),几乎不需要资源,因此它与资源分配无关。
  3. 进程之间相互独立,且不能共享资源
  4. 在同一进程的线程之间,可以共享进程的所有资源。
  5. 一个线程挂掉,整个进程都会跟着挂掉,而多进程应用,进程挂掉,不会影响到其他进程。多进程的程序要比多线程的程序健壮。
  6. 线程上下文切换的速度比进程上下文切换的快得多。
  7. 在多线程系统中,进程不是可执行的实体,线程才是实际的执行单位.

4、线程设计的3个难点

  1. 在 CPU 密集型任务、I/O 密集型任务以及充分利用多核 CPU 提升程序性能上找到一个平衡点。
  2. 尽可能支持规模更大的线程数量。
  3. 减少线程在用户态(User Mode)和内核态(Kernel Mode)中切换带来的开销。

5、并发与并行

并发:一个时间段内有很多的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行。

并行:一个时间段和时间点上都有多个线程或进程在执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Real提示“作为受限用户,您无足够的windows操作权限”的解决办法

运行Regedit.exe,翻到HKEY_CLASSES_ROOT/Software,删除Software;然后关闭注册表,再运行Regedit.exe,翻到HKEY_CLASSES_ROOT/Software,点右键选择“权限”,各个组都设置为“完全控制”和“读取”…

Java并发篇_线程详解

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

修改MYSQL最大连接数的3种方法

MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections100 …

可扩展的编程语言——Scala

一、Scala是什么 Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。 ​ Scala语言的名称来自于"可伸展的语言"。之所以…

ubuntu7.10 apache+php+mysql配置

本篇文章 经过许多次的测试和修改已经完成了在Ubuntu7.10 下 安装配置 ApachePHPMySQL的所有的工作. 1、在Ubuntu7.10 下安装 Apache2PHP5MySQL sudo apt-get install apache2 libapache2-mod-php5 php5 php5-gd mysql-server php5-mysql phpmyadmin在下载来自动安装配置的时候…

Spark-大规模数据处理计算引擎

官网:http://spark.apache.org 一、Spark是什么 Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是…

MySQL Replace INTO的使用

REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。请参见13.2.4节,“INSERT语法”。 注意,除非表有…

CentOS7下Spark集群的安装

从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点,Master节点主要运行集群管理器的中心化部分,所承载的作用是分配Application到Worker节点,维护Worker节点,Driver,Ap…

Scala中class与object区别

calss scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set scala 中没有 static 关键字,所以 对于一个class来说,所有的方法和成员变量在实例被 new 出来之前都是无法访问的 因此在class中的main方法没什么用了 scala 的object 中所有成员…

如何编写一个shell脚本

本文结合大量实例阐述如何编写一个shell脚本。 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的…

Scala变量和常用数据类型

一、 声明值和变量 Scala声明变量有两种方式,一个用val,一个用var。 声明方式:val / var 变量名 : 变量类型 变量值 val定义的值是不可变的,它不是一个常量,是不可变量,或称之为只读变量。 val示例&am…

ubuntu7.10下的vi用的怪怪的

到网上查了一下,原来是ubuntu7.10默认安装的是vim-tiny.可以重新安装vim-full #dpkg -l 如果是vim-tiny #apt-get install vim-full

(转)JVM监控工具介绍

2008年03月04日 16:57原作者: stone2083 原文地址:http://www.blogjava.net/stone2083/archive/2008/02/25/182081.htmljstatd启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。实例:…

Scala的控制结构

一、 if else表达式 scala中没有三目运算符,因为根本不需要。scala中if else表达式是有返回值的,如果if或者else返回的类型不一样,就返回Any类型(所有类型的公共超类型)。 例如:if else返回类型一样 scal…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset资源清单文件编写技巧2.1、查看定义Statefulset资源需要的字段2.2、查看statefulset.spec字段如何定义2.3、查看statefulset的spec.template字段如何定义 三、Statefulset使用案例:部署web站点3.1、编写一个Statefulset资…

Scala 函数

scala定义函数的标准格式为: def 函数名(参数名1: 参数类型1, 参数名2: 参数类型2) : 返回类型 {函数体} 函数示例1:返回Unit类型的函数 def shout1(content: String) : Unit {println(content) }函数示例2:返回Unit类型的函数&#xff0…

ubuntu7.10中的apache的一些设置

在/etc/apache2/mods-available目录下是apache2可用的模块.出现在这里的模块不代表你可以用.只是表明你的apache2已经安装了这些模块.可用的模块在/etc/apache2/mods-enabled这个目录下.(从redhat系列转过来看ubuntu,虽然感觉不习惯,但觉得ubuntu的这种分目录的方法很不错.) 如…

Java并发篇_Java内存模型

在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。那么它们产生的原因和在Java中解决的办法又是什么呢? 一、内存模型的相关概念 ​ 计算机在执行程序时,每条指令都是在CPU中执…

rz的安装

以前,在redhat系列的linux中,通过终端工具操作服务器,经常使用rz来上传小文件.但是有些系统默认情况下不能使用此命令.今天通过ubuntu.看到这条命令.即使ubunt没有装这个命令,你输入此命令时,它会提示你进行安装. rootubuntu:~# rzThe program rz is currently not installed. …

Java并发篇_synchronized

synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中的用法。 一、为什么要使用synchronized 在并发编程中存在线程安全问题,主要原因有&…