美文网首页程序员@IT·互联网Java 杂谈
进程与线程、并发与并行,傻傻分不清

进程与线程、并发与并行,傻傻分不清

作者: BarryLiu1995 | 来源:发表于2017-03-21 20:26 被阅读1978次

引言:博主本人最近正在准备着一个温度传感器 Android 客户端的项目,想把这个项目作为练习,希望在这个项目过程中能够深入学习 Android 后台编程的重点难点。这不,做这个项目一开始遇到的难题就是多线程开发了。本来以为将耗时任务开到一个线程中,同时开一个线程接收数据这样一个编程过程会比较简单,实际做起来很麻烦,才发现这涉及到数据结构,线程池, Android 四大件之 Service ,以及线程之间的通行(消息机制)等等重点难点,项目一直停滞不动,所以这才回来再认真看看并总结多线程编程的知识


进程与线程

在计算机基础知识中对于进程是这么介绍的,进程简单说来就是系统中一个软件的一次运行实例,而线程可以说是该运行过程中的多次运行过程。即一个进程可以有多个线程实例,这些线程之间是分享进程内的资源的。而进程与进程间的共享数据就没有那么简单,不同进程(可以理解为不同 App )需要由相同的 UID 才可以进行共享数据。还有进程与进程之间的通信还有 IPC 机制(Inter-Process Communication),关于该机制本人还暂未深入研究,只是知道这一机制的存在。而在 Android 中,根据 Google 的官方文档 进程与线程|Android Developers 中的阐述。我们在日常生活中从桌面启动器点击一个 APP 的图标,打开了某个应用界面。此时虚拟机会开启一个新的线程,该线程也就是该 App 的一次运行实例,也是概念上的进程。线程是调用 CPU 资源的最小单元,因此我们会认为是开启一个新的线程,这个线程也是我们说的进程,只是该进程目前为止还只有一个线程。而该线程成为主线程,也是我们所说的 UI 线程,该线程主要处理界面交互相关的逻辑,因为用户随时会和界面发生交互。这也就是我们所说的单线程模型, Android 是这样, Java 中同样也是如此,主线程就是 Java 编程中的main()方法。关于如何形象的理解进程与线程之间的关系,强烈推荐大家阅读参考进程与线程的一个简单解释此篇文章。


并发与并行

总体概念

  • 并发:在单核 CPU 系统中,系统调度在某一时刻只能让一个进程运行,虽然这种调度机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的进程让其运行的方式叫并发
  • 并行:在多核 CPU 系统中,可以让两个以上的进程同时运行在不同的物理核心上,这种运行的方式就是并行

区别

  • 并发在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,因为 CPU 计算速度很快,从宏观上看,好像这些进程都在同一个时间点执行
  • 并行是真正的细粒度上的同时进行:既同一时间点上同时运行着多个进程

多进程

多进程的优点之一是能充分使用多处理器体系结构,以便每个进程能并行运行在不同的处理器上。而使用多线程加强了并发功能(在不谈论 Intel 的 HT 技术或者 AMD 的 SMT 技术情况下)


超线程技术

“超线程”(Hyperthreading Technology)技术就是通过采用特殊的硬件指令,可以把一个物理内核模拟成两个逻辑内核,在单处理器中实现线程级并行计算,同时在相应的软硬件的支持下大幅度提高运行效能,从而实现在单处理器上模拟双处理器的效能。其实,从实质上说,超线程是一种可以将 CPU 内部暂时闲置处理资源充分“调动”起来的技术。虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的 CPU 那样,每个 CPU 都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗 CPU 的性能


参考资料

  1. 并发和并行的概念区分

  2. 进程与线程的一个简单解释

  3. 并发与并行的区别?

  4. 百度百科—超线程

最后是广告时间,我的博文将同步更新在三大平台上,欢迎大家点击阅读!谢谢

刘志宇的新天地

简书

稀土掘金

相关文章

  • 进程与线程、并发与并行,傻傻分不清

    引言:博主本人最近正在准备着一个温度传感器 Android 客户端的项目,想把这个项目作为练习,希望在这个项目过程...

  • Java 线程相关

    目录1.并行与并发2.进程与线程---- 2.1 进程---- 2.2 线程---- 2.3 进程与线程的区别--...

  • 并发编程之进程与线程

    并发编程之进程与线程 2.1 线程与进程 2.1.1 进程 2.1.2 线程 2.1.3 二者对比 2.2 并行与...

  • iOS 多线程技术总结

    概览 进程与线程的概念 多线程的由来 并行与并发 多线程的实现 串行与并行 线程的几种状态 串行队列与并发队列区别...

  • Python(2)---并发编程

    目录 1. Python多线程与多进程知识1.1 并发与并行1.2 线程(thread)与进程(process)...

  • 并发编程一:线程基础

    一、并行与并发 并发:任务交替执行,看起像在同时进行。并行:任务同时进行。 二、线程与进程 进程是操作系统分配资源...

  • Python多线程与多进程

    内容简述: 线程与进程的相关概念1、程序,进程,线程,多进程,多线程2、线程的生命周期3、并行与并发,同步与异步4...

  • 多线程笔记

    一:基础部分 并发与并行: 进程与线程: 线程调度: Thread.sleep(); //静态方法 可直接使用 ...

  • 进程,线程,并行,并发,python 之 GIL详解

    主要内容:1.线程与进程2.并发与并行3.python GIL 1.进程与线程 进程:程序的一次执行 线程:CPU...

  • java多线程-1-并发编程

    并行与并发 并发两个队伍排一个咖啡机单cpu,多线程 并行两个队伍排两个咖啡机多cpu,多线程 进程与线程 进程间...

网友评论

    本文标题:进程与线程、并发与并行,傻傻分不清

    本文链接:https://www.haomeiwen.com/subject/kiagnttx.html