原创转载请注明出处:https://agilestyle.iteye.com/blog/2442474
并发编程领域可以抽象成三个核心问题:分工、同步、互斥。
并发:指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但微观上是交替发生的。比如:某天上午先约女生A出去玩,再约女生B出去完
并行:指两个或多个事件在同一时刻同时发生。比如:某天上午同时约两个女生出去玩
程序:指的是一个指令序列。
进程控制块PCB:指的是系统为每个运行的程序配置的一个数据结构,用来描述进程的各种信息(如程序代码的存放位置)。
进程实体:由程序段、数据段、PCB三部分组成,是静态的。
进程:是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位,是动态的。
线程:是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程后,进程是资源分配的基本单位,线程是调度的基本单位。
互斥:同一时刻,只允许一个线程访问共享变量。
同步:线程之前如何通信、协作
临界区:一段互斥执行的代码
可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到
原子性:一个或多个操作在CPU执行的过程中不被中断的特性。原子性的本质其实不是不可分割,不可分割只是外在表现,其本质是多个资源间有一致性的要求,操作的中间状态对外不可见。所以解决原子性的问题,是要保证中间状态对外不可见。
有序性:程序按照代码的先后顺序执行,编译器为了优化性能,有时候会改变程序中语句的先后顺序
Happens-Before: 前面一个操作的结果对后续操作是可见的。A Happens-Before B意味着A事件对B事件来说是可见的,无论A事件和B事件是否发生在同一个线程里。Happens-Before约束了编译器的优化行为,虽允许编译器优化,但是要求编译器优化后一定遵守Happens-Before规则。
等待-通知机制:一个完整的等待-通知机制,线程首先获取互斥锁,当线程要求的条件不满足时,释放互斥锁,进入等待状态;当要求的条件满足时,通知等待的线程,重新获取互斥锁。
线程安全:在多线程调用情况下,依然表现正常,程序按照我们期望的执行。
数据竞争:当多个线程同时访问同一数据,并且至少有一个线程会写这个数据的时候,如果不采取保护措施,那么就会导致并发bug
竞态条件:程序的执行结果依赖线程执行的顺序
死锁:一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象
活锁:线程没有发生阻塞,但仍然会存在执行不下去的情况
饥饿:线程因无法访问所需资源而无法执行下去的情况
吞吐量:指的是单位时间内能处理的请求数量。吞吐量越高,说明性能越好。
延迟:指的是从发出请求到收到响应的时间。延迟越小,说明性能越好。
并发量:指的是能同时处理的请求数量。一般来说随着并发量的增加、延迟也会增加。所以延迟这个指标,一般都会是基于并发量来说的。例如:并发量是1000的时候,延迟是50毫秒。
在并发编程领域,提升性能本质上是提升硬件的利用率,再具体点来说,就是提升I/O的利用率和CPU的利用率
管程:指的是管理共享变量以及对共享变量的操作过程,让它们支持并发。翻译为Java领域的语言,就是管理类的成员变量和成员方法,让这个类是线程安全的。
通用的线程生命周期:初始状态、可运行状态、运行状态、休眠状态、终止状态
Java语言中线程共有6钟状态:NEW(初始化状态)、RUNNABLE(可运行状态)、BLOCKED(阻塞状态)、WAITING(无时限等待)、TIMED_WAITING(有时限等待)、TERMINATED (终止状态)
调用栈:指的是CPU通过堆栈寄存器找到调用方法的参数和返回地址。
栈帧:每个方法在调用栈里都有自己的独立空间。每个栈帧里都有对应方法需要的参数和返回地址。当调用方法时,会创建新的栈帧,并压入调用栈;当方法返回时,对应的栈帧就会被自动弹出,也就是说,栈帧和方法是同生共死的。局部变量的作用域是方法内部,所以局部变量同样是放到了调用栈里;局部变量和方式是同生共死的,一个变量如果想跨越方法的边界,就必须创建在堆里。
线程封闭:两个线程可以同时用不同的参数调用相同的方法,每个线程都有自己独立的调用栈,局部变量保存在线程各自的调用栈里面,不会共享,所以自然也就没有并发问题。
相关推荐
《JAVA并发编程实践》是一本深入探讨Java多线程与并发控制的权威著作。这本书针对Java程序员,旨在帮助他们理解和掌握如何在并发环境中编写高效、可靠的代码。在Java的世界里,并发编程是不可或缺的一部分,特别是在...
"编程术语英汉对照"是一个非常实用的资源,它为程序员和编程初学者提供了一个全面的词汇表,将常见的编程概念、指令、错误信息等翻译成中文,以帮助他们更好地理解和学习。下面,我们将深入探讨其中的一些重要编程...
在讨论多核多线程编程时,我们首先需要了解几个核心概念:多核、多线程、并发编程。多核指的是中央处理器(CPU)中集成多个处理核心的设计,每个核心都可以独立执行运算任务。多线程则是操作系统中能同时运行多个...
以下是一些常见的术语和它们的解释: 1. **cover** - 覆盖、涵盖:在编程中,"cover"可能指覆盖测试,确保代码的每个部分都经过了测试。 2. **create/creation** - 创建、生成:在编程和数据库管理中,创建指的是...
在并发编程中,原子性确保了操作的完整性和一致性。 #### 24. 属性 (Attribute) 属性是描述对象特征的信息。在面向对象编程中,属性通常是类成员变量。 #### 25. 音频 (Audio) 音频是指声音信号的数字化表示。在...
以下是一些常见的Java编程术语及其英文解释: 1. **abstract** - 抽象的,常用于标记抽象类或抽象方法。 2. **abstraction** - 抽象体,表示将复杂实体简化为易于理解的概念。 3. **access** - 存取,指对类、方法...
这种特性保证了数据的安全性,简化了并发编程,并有助于调试。 5. **λ演算(Lambda Calculus)** λ演算是函数式编程的理论基础,它是一种抽象的计算模型,使用匿名函数(λ表达式)来表达计算。 6. **模式匹配...
### 进程与线程:并发编程的基础 - **Process行程(or进程,大陆用语)**:操作系统中运行程序的实例,每个进程都有自己的独立内存空间和系统资源。 - **Thread线程(大陆用语)**:进程内的一个执行单元,共享...
以上这些术语不仅涵盖了Python编程的基础概念,还包括了更高级的主题如并发处理、性能优化等。通过学习这些术语及其应用场景,开发者可以更好地理解和应用Python的相关技术,从而构建出更加健壮和高效的程序。
以下是一些常见的IT术语及其对应的中文解释: 1. **Constructor** - 建构式:在面向对象编程中,构造器是用于初始化新创建对象的特殊方法。 2. **Declaration** - 宣告式:声明一个变量、函数或类,告知编译器它们...
在现代iOS应用开发中,虽然有更新的技术如操作对象(Operation Objects)和Grand Central Dispatch(GCD)提供更高效和更现代的并发编程方式,但理解底层的线程管理依然重要。 首先,了解多线程的基本概念和术语是...
多线程编程涉及的术语包括并发性和并行性。并发指的是多个任务看起来像是同时执行的,但实际上可能是在不同的时间点由同一个处理器轮流执行。并行则是指多个任务实际上是同时在不同的处理器或核心上执行。 线程调度...
本文将对Erlang编程规则的中文翻译版本中的部分内容进行详细解析,包括Erlang术语、SW工程原则、程序、服务器和消息处理、Erlang特殊约定、常见错误以及所需文档约定等。 Erlang术语部分提到了Erlang程序的模块化...
- **术语**:文档中可能会涉及一些特定的编程术语,如“命名空间”、“类”、“接口”等,理解这些术语对于遵循规范至关重要。 2. **通用编程规范** - **明确性和一致性**:鼓励开发者使用明确的命名策略,避免...
### Pb常用概念与术语及Script编程规范 #### 1. DBMS (Database Management System) 数据库管理系统 数据库管理系统(DBMS)是一种能够管理和控制数据库资源的软件。它为用户提供了一个高效、安全的方式来创建、维护...