进程与线程 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

 

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

相关文章
|
15天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
30天前
|
消息中间件 安全 Linux
线程同步与IPC:单进程多线程环境下的选择与权衡
线程同步与IPC:单进程多线程环境下的选择与权衡
58 0
|
1月前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
82 0
|
16天前
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。
|
2天前
|
Java 数据库连接 数据处理
Python从入门到精通:3.1.2多线程与多进程编程
Python从入门到精通:3.1.2多线程与多进程编程
|
2天前
|
NoSQL Linux 程序员
【linux进程信号(一)】信号的概念以及产生信号的方式
【linux进程信号(一)】信号的概念以及产生信号的方式
|
2天前
|
存储 Linux Shell
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
|
8天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
28 0
|
18天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
23 4
|
23天前
|
安全 Linux API
Android进程与线程
Android进程与线程
18 0