`
623deyingxiong
  • 浏览: 190947 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

进程和线程(Concurrency Tutorial 1)

阅读更多
       此刻,在南京参加一个封闭开发,闲来无事也是因为工作需要看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)的线程,主线程可创建更多的线程,在下一小节里我们将做详述。
分享到:
评论

相关推荐

    Akka Concurrency Framework

    **Dataflow Concurrency** 是一种基于数据流的并发模型,它可以自动处理并发和同步问题,使得编写并行代码变得更加简单。 ##### 4.8 Fault Tolerance (Scala) Akka提供了强大的故障容忍机制,可以通过定义不同的...

    tutorial-12factor

    通过简单地增加进程数量来水平扩展,而不是通过多线程或多进程。这样便于管理和监控。 **9. 发布版本(Disposability)** 进程应能快速启动和停止,方便部署、更新和故障恢复。使用容器技术如Docker可以更容易地...

    asio 开发文档教程

    - **The Proactor Design Pattern: Concurrency Without Threads**:讨论了proactor模式及其如何在不使用线程的情况下实现并发。 - **Threads and Asio线程与asio**:阐述了asio如何与多线程环境协同工作。 - **...

    swoole-demo

    1. **Swoole基础**:首先,我们需要了解Swoole的基本概念和架构,包括Server、Client、Worker、Task Worker、Event Loop等。Swoole Server可以处理HTTP、WebSocket、TCP、UDP等各种协议,同时支持TCP长连接。 2. **...

    golang-tutorials:Go教程-通过编写许多Golang代码让我们真正地变得肮脏

    通过goroutines和channels,Go提供了轻量级线程和高效通信机制。goroutines是低成本的并发执行单元,它们可以在一个进程中轻松创建成千上万个;channels则用于在不同的goroutines之间传递数据,实现同步,避免了传统...

Global site tag (gtag.js) - Google Analytics