进程与线程 thread (二)——线程概念

简介: 为什么线程会有用以及如何使用它们 人们需要线程的主要原因:1、在许多应用中同时发生着多种活动。其中某些活动随着时间的推移会阻塞。

为什么线程会有用以及如何使用它们

 

人们需要线程的主要原因:

1、在许多应用中同时发生着多种活动。其中某些活动随着时间的推移会阻塞。通过将这些应用程序分解成可以准并行运行的多个顺序线程,程序设计模型会变得更简单。

2、线程比进程更轻量级,所以他们比进程更容易创建,也更容易撤销

3、若多线程都是CPU密集型的,那么并不能获得性能上的增强,但是如果存在着大量的计算大量的I/O处理,拥有多线程允许这些活动彼此重叠进行,从而会加快应用程序执行的速度。

 

线程模型

并行实体拥有共享同一个地址空间所有可用数据的能力。

 

构造服务器的三种方法

模型 特性
多线程 并行性、阻塞系统调用
单线程进程 无并行性、阻塞系统调用
有限状态机 并行性、非阻塞梓潼调用、中断

 

有限状态机

每次服务器从为某个请求工作的状态切换到另一个状态时,都必须显示的保存或重新装入相应的计算状态。我们以一种困难的方式模拟了线程及其堆栈。每个计算都有一个被保存的状态,存在一个会发生且使得相关状态发生改变的事件集合,我们把这类设计称为有限状态机。

 

多线程处理及大量数据的应用的例子

有关的进程可以用一个输入线程、一个处理线程和一个输出线程组成。输入线程把数据读入到输入缓冲区中;处理线程从输入缓冲区中取出数据,处理数据,并把结果放在输出缓冲区中;输出线程把这些结果写到磁盘上。

 

 

 

经典的线程模型

进程模型基于两种独立的概念:资源分组处理与执行。

 

理解进程的角度

1、进程用某种方法把相关资源集中在一起。进程有存放程序正文和数据以及其他资源的地址空间。

2、进程拥有一个执行的线程,通常简写为线程。线程中有一个计数器,用来记录接着要执行哪一条指令。线程拥有寄存器,用来保存线程当前的工作变量。线程还有一个堆栈,用来记录执行历史。

 

进程用于把资源集中到一起,而线程则是在CPU上被调度执行的实体。

 

所有的线程都有完全一样的地址空间,他们共享一样的全局变量。由于各个线程都可以进程地址空间中的每一个内存地址,所以一个线程可读可写甚至可清除另一个线程的堆栈

 

进程中的内容 线程中的内容

地址空间

全局变量

子进程

即将发生的定时器

信号与信号处理程序

账户信息

程序计数器

寄存器

堆栈

状态

 

为什么每个线程拥有自己的堆栈?

每个线程的堆栈有一帧,供各个被调用但是还没有从中返回的过程使用。该堆栈中存放了响应过程的局部变量以及过程调用完成之后使用的返回地址。每个线程会调用不同的过程,从而有一个各自不同的执行历史。

 

创建线程通常会返回一个线程标识符,该标识符是线程的名字。

 

创建线程 pthread_create
退出线程 pthread_exit
等待其他线程终止 pthread_join
允许线程让出CPU给出其他线程 pthread_yied
创建并初始化一个线程 pthread_attr_init
删除一个线程的属性结构 pthread_attr_destory

 

新创建的线程的线程标识符会被所谓函数值返回。

相关文章
|
5月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
805 2
|
5月前
|
设计模式 消息中间件 安全
【JUC】(3)常见的设计模式概念分析与多把锁使用场景!!理解线程状态转换条件!带你深入JUC!!文章全程笔记干货!!
JUC专栏第三篇,带你继续深入JUC! 本篇文章涵盖内容:保护性暂停、生产者与消费者、Park&unPark、线程转换条件、多把锁情况分析、可重入锁、顺序控制 笔记共享!!文章全程干货!
393 1
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
269 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
287 1
|
11月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
365 67
|
10月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
191 20
|
10月前
|
Arthas 监控 Java
Arthas thread(查看当前JVM的线程堆栈信息)
Arthas thread(查看当前JVM的线程堆栈信息)
1719 10
|
9月前
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
331 0
|
9月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
164 0
|
9月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
223 0

热门文章

最新文章