程序员@IT·互联网Java 杂谈

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

2017-03-21  本文已影响1978人  BarryLiu1995

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


进程与线程

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


并发与并行

总体概念

区别


多进程

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


超线程技术

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


参考资料

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

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

  3. 并发与并行的区别?

  4. 百度百科—超线程

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

刘志宇的新天地

简书

稀土掘金

上一篇下一篇

猜你喜欢

热点阅读