此刻,在南京参加一个封闭开发,闲来无事也是因为工作需要看Java tutorial.突然想把它翻译下来,仔细想想找出来几个理由:1 最近比较浮躁,什么技术都玩,总是不能深入,希望通过翻译技术文章让自己沉下来。2 还不算难翻译,顺便提高下英语水准和码字速度。本译文纯属笔者练习之用(大家就容许这位“笔者”得瑟一回呗),希望不会误导大家,文中凡是笔者以为重要的或可能翻译有误的名词都括弧对应英文。废话少说,直接上文。
原文地址:http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
课程: 并发
计算机用户理所当然的认为他们的系统能够一次做很多事情。他们以为他们可以在其他应用下载文件,管理打印队列和音频流时,继续使用文档处理程序工作。即使是一个程序他们也期望一次能做不止一件事情。譬如说,音频流软件必须同时从网上下载音频,压缩它,重放,刷新显示。即使文字处理软件也应该时刻对键盘和鼠标事件作出响应,不管它是否正在忙于刷新显示或变换格式。我们把这些可以做很多事情的软件叫作并发软件(concurrent software)。
Java 框架从Java语言到Java类库都完全支持了并发编程。从5.0开始,Java框架已经包含了高级别的并发编程接口。本课程介绍Java框架的基础并发支持,并总结一些java.util.concurrent包中的高级别并发编程接口。
进程和线程
在并发编程中,有两种基本的执行方式(two basic units of execution):进程和线程。在java中,并发编程大多与线程有关,然而进程也很重要。
正常的计算机系统都有很多活动的进程和线程。即使在单处理器系统中亦如此,因此在任一时刻实际上只有一个线程在运行。通过一个叫作时间分片的操作系统特性,单处理器计算机的计算时间在几个进程和线程之间共享。
这个特性在处理多个进程和线程的多核系统中变得越来越普遍,从而大大提高了操作系统并发执行进程和线程的能力(capacity)。但是并发也可以存在于没有多个进程或多个处理器的简单系统中。
进程
一个进程拥有一个独立(self-contained)的执行环境。进程都拥有一个完整的,私有的运行资源集合(private set of runtime resources);尤其是,进程拥有一个自己的内存空间(memory space)。
进程经常被等同于是程序或软件。然而,用户眼中的软件实际上可能是一个互相合作的进程集合。为了帮助(facilitate)多个进程间通信,大多数操作系统支持进程间通信(IPC Inter Process Communication)资源,譬如管道(pipes)和套接字(sockets)。IPC不仅被用来支持同一操作系统上进程间的通信,也用在不同操作系统之间。
大多Java虚拟机的实现是单进程的。一个Java 应用程序可以使用ProcessBuilder对象创建更多的进程。多进程应用(Multiprocess application)超出了本课程的范围。
线程
线程有时也称作轻量(lightweight)进程。进程和线程都提供一个执行环境,但创建一个线程需要的资源比进程更少。
多个线程存在于单个进程中,也就是说每个进程至少有一个线程。线程共享进程的资源包括内存和已打开的文件,这样提高了效率,同时也带来了潜在的交互问题(potentially problematic)。
多线程(Multithreaded)运行是Java框架的基本特性。如果你去数”system”用户的线程,譬如用作内存管理、信号处理的线程,你会发现每个应用都有至少一个线程-或多个线程。但是从程序员的角度看,你只启动了一个叫作主线程(the main thread)的线程,主线程可创建更多的线程,在下一小节里我们将做详述。
分享到:
相关推荐
本书首先会介绍并发的基本概念,如进程与线程的区别,以及同步与异步执行的原理,帮助读者建立坚实的理论基础。 书中会详细讲解如何创建和管理线程,包括std::thread的使用、线程的生命周期以及线程安全问题。此外...
1. **线程基础**:首先,书中会介绍线程的基本概念,包括线程的创建、启动、同步和停止。Java提供了`Thread`类和`Runnable`接口来实现线程,同时讲解了`start()`与`run()`方法的区别。 2. **并发模型**:Java并发...
本书首先介绍了Python并发编程的基础概念,比如进程和线程的基本原理、同步与通信机制、以及并发带来的问题等。随后,书中有针对性地详细讲解了多线程编程。多线程是并发编程中的一种常见方式,允许你在一个程序中...
例如,书中可能会介绍如何使用多线程和多进程来优化Web爬虫的性能,或者如何利用异步编程来构建高性能的Web服务器等。 #### 七、总结 通过学习《Learning Concurrency in Python》这本书,读者不仅能够掌握Python...
通过实际案例,作者引导读者深入理解死锁、资源竞争和线程的其他潜在问题。 本书的读者群体主要是有一定C++基础的程序员,他们希望通过学习并发编程来提高程序的性能和资源利用率。书中不仅涵盖了基础概念和常见...
《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowles和Doug Lea等专家共同编写。这本书深入探讨了Java平台上的多线程和并发编程,旨在...
本书主要探讨了C++中的多线程编程技术,包括线程的管理、线程间的数据共享、并发操作的同步以及C++内存模型和原子类型的操作。 首先,本书提到了"Hello, world of concurrency in C++!",这通常是学习一门新的编程...
本书深入探讨了C++中的多线程编程技术,从基本的线程管理到高级的并发数据结构设计,再到并发代码的测试和调试,每一个部分都提供了详尽的指导和实践案例。 并发编程是现代软件开发中一个非常重要且复杂的领域,...
1. **线程与进程**:理解操作系统中的线程和进程的基本概念,它们如何分配资源,以及它们之间的通信方式,如共享内存、管道、套接字等。 2. **同步与互斥**:在并发环境中,数据一致性是关键问题。互斥锁、信号量、...
5. 数据竞态(Race Condition)是指当多个进程或线程同时访问和操作同一数据时,其执行的结果取决于进程或线程的执行顺序,这种不确定性可能会导致程序错误。 6. 原子性(Atomicity)是指一系列操作要么全部执行,...
并发编程是一个广泛的话题,涉及到线程的创建、管理、数据共享、同步、内存模型、设计无锁数据结构、设计基于锁的数据结构、并发代码设计、高级线程管理和多线程应用程序的测试与调试等多个方面。 在描述中,书籍的...
1. **线程**:书中详细介绍了如何创建和管理线程,包括std::thread库的使用,以及如何在线程间共享数据和执行同步操作。 2. **同步机制**:作者讨论了各种同步原语,如互斥量(mutexes)、条件变量(condition ...
1. 并发基础:首先,书中会介绍并发编程的基本概念,包括线程、进程、同步与通信机制,以及并发编程的挑战,如竞态条件、死锁和资源饥饿。 2. C++11及以后的并发支持:C++11引入了新的并发库,包括`std::thread`、`...
《C++ Concurrency In Action》是Anthony Williams所著的一本深入探讨C++11新标准下并发和多线程编程的专著。这本书旨在引导读者理解并掌握C++11中关于并发编程的新特性和最佳实践,帮助开发者编写出高效、稳定且...
【系统化学习多线程1】的概述主要涵盖了线程和进程的基本概念,以及它们在操作系统中的作用。线程和进程是操作系统中的核心概念,它们决定了程序如何在计算机上并发执行。 **1. 进程与线程的区别** - **进程...
1. **第一章:并发的基本概念** - 引导读者理解并发编程的基本原理,包括线程、进程、执行模型以及并发带来的挑战。 2. **第二章:避免并发问题** - 介绍如何通过使用不可变对象、最小化共享状态和正确使用同步来...
Python Concurrency with asyncio