线程详细概念

一、概述 
在windows中,每一个打开运行的应用程序或后台程序,比如运行中的QQ、谷歌浏览器、网易云音乐、资源管理器等都是一个进程。我们感觉这些程序是“同时”运行的,但实际上,一个处理器同一时刻只能运行一个进程,只是CPU在高速轮换执行让我们有这样的错觉,我们感受不到中断的原因是CPU执行速度相对于我们的感觉实在是太快了。

我们学c,写java,大部分时候做的都是单线程的编程。只有一条顺序执行的主线——程序从main方法开始,依次执行代码,直到执行完全部代码,除非某一行代码出错导致主线阻塞。

多线程就是有多条顺序执行流“同时”执行,且它们之间互不干扰。多线程的应用场景,举一个很简单的例子,我们写一个Web网站后台,如果只支持单线程,那么同时只能有一个用户访问站点,这现实吗?我们是不是应该为每一个用户创建一个线程,使每个用户能“同时”访问站点。

这里,我所有的“同时”都画上了引号,因为在计算机领域,宏观的“同时”与微观的“同时”是不同的,它们被叫做并发与并行。

并发是指,同一时刻只能有一条指令(或一个进程、一个线程)运行,但由于CPU的轮换执行速度超乎想象,在宏观上看,就有多条指令同时执行的效果。 
而并行,就像我们平时的理解,是同一时刻有多条指令在多个处理机上同时执行。

二、进程详述

1、概念 
我们都知道程序,一个程序是静态的,通常是存放在外存中的。而当程序被调入内存中运行后,就成了进程。 
顾名思义,进程就是进行中的程序,它是个动态的概念。是系统进行资源分配与调度的基本单位。

2、进程一般有如下三个特点: 
a、独立性:每个进程拥有自己独立的资源,拥有私有的地址空间,其大小与处理机位数有关,如Win32系统,32位地址映射4GB地址空间,其中低地址的2GB作为用户模式的虚拟地址空间(应用程序可共享,线程间独立),高地址的2GB作为内核模式的虚拟地址空间(系统使用)。 
b、动态性:这点从进程的概念可以看出,运行中的程序就是进程。进程中有时间、状态(博文详解)、生命周期等动态的概念。 
c、并发性:多个进程在单个处理器上并发执行。

3、进程主要包含了三个部分: 
a、程序代码:用于描述进程要完成的功能。 
b、数据集合:程序执行所需要的数据与工作区域。 
c、PCB程序控制块:包含进程的描述信息与控制信息,是进程的唯一标志,也正是因为有了PCB,进程就成了一个动态的概念。

三、线程与多线程详述

1、概念,由线程与进程关系论述

一个进程内部可能包含了很多顺序执行流,每个顺序执行流就是一个线程。 
现在操作系统大多使用抢占式多任务操作策略,以支持多进程的并发性,而多线程是多进程的扩展,使一个进程也能像一个处理器一样并发处理多项任务,线程就是进程中并发执行的基本单位,线程也因此被称为“轻量级进程”。一个进程可以包含多个线程,每条线程都有其父进程。

2、线程的资源

我们可能了解过Java的内存机制,听说过“线程私有”、“线程共享”这样的名词,方法栈(通过栈帧中的局部变量表存放局部变量)、程序计数器是线程私有的,它们的内存空间是专属于某条线程的;而父进程的资源(如代码段、进程公有数据)是子线程间共享的,对于共享资源区域的编程要十分小心,确保不会影响到其他线程。

3、多线程的优势,由线程与进程的区别论述

a、独立的线程与分隔的进程相比,隔离程度更小,因为线程共享了进程的资源,更容易实现线程间通信。 
b、系统创建一个进程要为进程分配资源,而创建一个线程,只需要分配线程私有的资源即可,代价小很多,多以用多线程代替多进程实现高并发有更高的效率。 
c、多线程编程更加方便,程序代码级别即可实现。

原文地址:https://www.cnblogs.com/xiaowie/p/9133223.html

时间: 2024-11-10 00:58:04

线程详细概念的相关文章

Java - 线程基本概念

[java并发编程实战]-----线程基本概念 线程状态图 说明:线程共包括以下5种状态.1. 新建状态(New)         : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread().2. 就绪状态(Runnable): 也被称为"可执行状态".线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程.例如,thread.start().处于就绪状态的线程,随时可能被CPU调度执行.3. 运行状态(Running)

Java 线程池概念、原理、简单实现

线程池的思想概述 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结東了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间.那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?Java中可以通过线程池来达到这样的效果.下面们就来详细讲解一下Java的线程池. 线程池概念 线程池其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省

第72课 进程与线程的概念

1. 程序和进程的概念 程序 进程 概念 程序是计算机存储系统中的数据文件 ①源代码程序:文本文件,描述程序行为和功能 ②可执行程序:二进制文件,直接加载并执行. ①广义概念:程序关于某个数据集合的一次运行活动 ②狭义概念:程序被加载到内存中执行后得到进程 区别 程序是硬盘中静态的文件:存储系统中的一段二进制表示 进程是内存中动态的运行实体:数据段.代码段.PC指针等. 联系 一个程序可能对应多个进程.比如,一个程序多次运行,每次运行产生一个进程 一个进程可能包含多个程序.比如,一个程序依赖多个

Java 线程?基本概念 可见性 同步

开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于Java来说,在语言内部提供了线程的支持.但是Java的多线程应用开发会遇到很多问题.首先是很难编写正确,其次是很难测试是否正确,最后是出现问题时很难调试.一个多线程应用可能运行了好几天都没问题,然后突然就出现了问题,之后却又无法再次重现出来.如果在正确性之外,还需要考虑应用的吞吐量和性能优化的话,就

Java的多线程 --线程的概念

Java的多线程--线程的概念 一个程序同时执行多个任务,通常,每个任务称之为线程(thread),她是线程控制的简称. 可以运行一个以上的任务的程序叫做多线程程序. 1.感觉线程和进程很像,那么他们的区别是什么? 其实他们是有本质的区别:每个进程拥有自己独立的一整套变量,而线程则共享数据. 2.在Java中怎么创建一个线程去执行一个任务. 主要有4个步骤. 1)将任务代码移到实现了Runnable接口类的run方法中,这个接口很简单,只有一个方法. public interface Runna

全面理解进程和线程的概念、区别和联系

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 进程与线程的一个简单解释 在这个简单易懂的类比下,了解一下进程和线程的宏观概念: 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都有一个自己的地址空间,即进程空间或(虚空间).进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216

JAVA线程的概念详解

和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming). 多线程程序包含两条或两条以上并发运行的部分.程序中每个这样的部分都叫一个线程(thread),每个线程都有独立的执行路径.因此,多线程是多任务处理的一种特殊形式. 你一定知道多任务处理,因为它实际上被所有的现代操作系统所支持.然而,多任务处理有两种截然不同的类型:基于进程的和基于线程的.认识两者的不同是十分重要的. 对很多读者,基于进程的多任务处理是更熟悉的形式.进程(process)本

Linux下Java线程详细监控和其dump的分析使用----分析Java性能瓶颈

这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: (一):通过[top -p 12377 -H] 查看java进程的有哪些线程的运行情况:       和通过[jstack 12377 > stack.log]生成Java线程的dump详细信息: 先用top命令找出占用资源厉害的java进程id,如图:# top 如上

进程和线程的概念,区别(理论知识)

进程和线程的概念,区别: 什么是线程????首先,计算机所有指令的执行都是CPU运算,CPU有规则,线程是操作系统能调度的最小单位线程可以简单理解为一堆指令做每一件事背后都是CPU在运算,例如画图.qq这些应用软件寄生在操作系统上画图和qq是独立的软件,各自分一块独立的内存空间硬盘--内存--CPU 慢--快为了安全,画图软件的内存不能访问qq的内存但是,qq或画图有一个整体的东西暴露给操作系统,这个整体的东西就是进程,里面包含对各种资源的调用例如内存的管理,网卡的调用等,对各种资源管理的集合称