线程与进程的区别及其通信方式强烈建议读者阅读文末参考文章。本文只是一个概述和总结。更详细的内容参见参考列表。你也可以在我的GitHub上获取所有文章:https://github.com/didikee/Android-Learning-Report/tree/master/Blog或博客:segmentFault&BlogGarden后面是对之前一个Android面试问题的回应第八篇问题。-->上一篇[2017Android面试题[基础与细节]](https://segmentfault.com/a/11...概念线程:是操作系统能够进行操作调度的最小单位。它是theprocessintheprocess一个执行进程,一个进程可以运行多个线程进程:程序在执行中的一个实例进程和线程的区别一个程序至少有一个进程,一个进程至少有一个线程.线程的划分规模比进程小,使得多线程程序的并发度高,另外进程在执行时有独立的内存单元,多个线程共享内存,大大提高了运行效率线程在执行过程中还是和进程不同,每个独立的线程都有一个程序运行入口、顺序执行顺序和程序出口,但是线程不能独立执行,必须依赖于应用程序,应用程序提供多线程执行控制。从逻辑上看,多线程的含义就是在一个应用程序中,可以同时执行多个执行部分。但是操作系统并没有把多个线程当作多个独立的应用来实现进程的调度管理和资源分配。这是进程与线程的重要区别。进程是关于在某个数据集上运行的活动,具有某些独立功能的程序。进程是系统进行资源分配和调度的独立单位。线程是进程的一个实体,是CPU调度调度的一个比进程更小,可以独立运行的基本单位。线程本身基本上不拥有系统资源,只有少数运行中必不可少的资源(如程序计数器、一组寄存器和堆栈)。但它可以与属于同一进程的其他线程共享该进程拥有的所有资源。一个线程可以创建和撤销另一个线程;同一进程中的多个线程可以并发执行。总结:主进程和线程的区别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间。一个进程崩溃后,不会影响保护模式下的其他进程,线程只是一个进程中不同的执行路径。线程有自己的栈和局部变量,但线程之间没有单独的地址空间。一个线程的死亡意味着整个进程的死亡,所以多进程程序比多线程程序更健壮,但是在进程间切换时,消耗的资源更大,效率更低。但是对于一些需要同时执行和共享某些变量的并发操作,只能使用线程,不能使用进程。如果你有兴趣深入,我建议你看看《现代操作系统》或《操作系统的设计与实现》。没错,让我们说清楚一点。摘自:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html补充:线程一般由New创建,进程一般由forkparent产生。进程间通信linux下进程间通信的几种主要方式介绍:管道(Pipe)和命名管道(namedpipe):管道可以用于具有亲属关系的进程之间的通信,命名管道克服了管道所具有的局限性没有名字,所以,除了管道的功能外,它还允许无关进程之间的通信;信号(Signal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生,除了进程间通信之外,进程也可以向进程自身发送信号;除了支持Unix早期的信号语义函数sigal外,linux还支持语义符合Posix的信号函数sigaction。signal机制也可以统一对外接口,signal函数用sigaction函数重新实现);消息队列(Message):消息队列是消息的链表,包括Posix消息队列系统V消息队列。拥有足够权限的进程可以向队列中添加消息,被授予读权限的进程可以从队列中读取消息。消息队列克服了信号携带的信息量小,管道只能携带未格式化的字节流,缓冲区大小有限的缺点。共享内存:允许多个进程访问同一内存空间,是可用的最快的IPC形式。它是为其他通信机制的低效而设计的。它常与信号量等其他通信机制结合使用,以实现进程间的同步和互斥。信号量:主要用作进程之间和同一进程的不同线程之间的同步手段。套接字(Socket):一种更通用的进程间通信机制,可用于不同机器之间的进程间通信。最初由Unix系统的BSD分支开发,现在通常可移植到其他类Unix系统:Linux和SystemV变体都支持套接字。摘自:https://www.ibm.com/developerworks/cn/linux/l-ipc/各种通信方式的比较及优缺点:管道:速度慢,容量有限,只有父子进程可以与named通信pipes):任何进程都可以通信,但速度较慢。消息队列:容量受系统限制,需要注意的是第一次读取时,要考虑上次没有读取到数据的问题。信号量:不能传输复杂消息,只能用于同步共享内存:容易控制容量,速度快,但必须保持同步。比如一个进程在写的时候,另一个进程要注意读写,相当于线程中的线程安全。当然,共享内存区也可以用于线程间通信,但不是必须的。这些线程已经在同一个进程中共享了一块内存。摘自:http://blog.csdn.net/gatieme/article/details/50908749java线程间通信常用的方法有两种:通过管道流访问共享变量(注意:需要处理同步问题)Android线程通信与进程通信线程通信:Handler消息队列进程通信:binder机制,底层方法还是共享内存。本文引用文章:java多线程通信方法:https://my.oschina.net/u/248570/blog/53226#comment-list深入理解Linux进程间通信(IPC):https://万维网。ibm.com/developerworks/cn/linux/l-ipc/Linux进程间通信的几种方式总结--Linux内核分析(七):http://blog.csdn.net/gatieme/article/details/50908749Remote详细过程调用(RPC):http://www.importnew.com/21660.htmlwiki-Thread:https://zh.wikipedia.org/wiki/%E7%BA%BF%E7%A8%8Bwiki-Process:https://zh.wikipedia.org/wiki/%E8%A1%8C%E7%A8%8BThread通信:https://www.safaribooksonline.com/library/view/efficient-android-threading/9781449364120/ch04。html线程和进程通俗解释:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html进程概念:https://defrur.gitbooks.io/introduction-to-process/concept.html进程和线程的区别:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html
