我的机器学习教程「美团」算法工程师带你入门机器学习   已经开始更新了,欢迎大家订阅~

任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~



概念

线程:是操作系统能够进行运算调度的最小单位。是进程中的一个执行流程,一个进程中可以运行多个线程。

进程:一个执行中的程序的实例

进程 与 线程 的区别

一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

总结:

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。

摘自:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html

补充:

线程一般是New出来的,而进程一般fork某个母体而产生的。

进程间通信

在 linux 下进程间通信的几种主要手段简介:

  1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

  2. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
  3. 消息队列(Message):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

  4. ** 共享内存**:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

  5. 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

  6. 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

摘自:https://www.ibm.com/developerworks/cn/linux/l-ipc/

各种通信方式的比较和优缺点:

  1. 管道:速度慢,容量有限,只有父子进程能通讯

  2. 有名管道(named pipe):任何进程间都能通讯,但速度慢

  3. 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题

  4. 信号量:不能传递复杂消息,只能用来同步

  5. 共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

摘自:http://blog.csdn.net/gatieme/article/details/50908749

线程间通信

java中常用两种:

  1. 通过访问共享变量的方式(注:需要处理同步问题)
  2. 通过管道流

Android 中线程通信与进程通信

线程通信: Handler消息队列
进程通信: binder 机制,底层用的还是共享内存的方式。

作者:didikee

出处:http://www.cnblogs.com/didikee/

引用文献

本文参考的文章:
java多线程通信方法: https://my.oschina.net/u/248570/blog/53226#comment-list
深刻理解Linux进程间通信(IPC): https://www.ibm.com/developerworks/cn/linux/l-ipc/
Linux进程间通信的几种方式总结--linux内核剖析(七): http://blog.csdn.net/gatieme/article/details/50908749
远程过程调用(RPC)详解: http://www.importnew.com/21660.html
wiki-线程: https://zh.wikipedia.org/wiki/%E7%BA%BF%E7%A8%8B
wiki-进程: https://zh.wikipedia.org/wiki/%E8%A1%8C%E7%A8%8B
Thread Communication: 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

线程与进程的区别及其通信方式相关推荐

  1. 探究线程与进程的区别这一问题

    进程和线程基础(理论概念) 1. 定义 看了下面的定义,可能会有点晕,但我还是要把他写下来(为了严谨). 进程是资源(CPU.内存等)分配的基本单位,具有一定独立功能的程序关于某个数据集合上的一次运行 ...

  2. 对线程与进程的区别以及对多线程并发的理解

    一.线程与进程的区别 先简单说说线程与进程的概念: (1)进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程. (2)线程是指进程中的一个执行流程. 区别: 一 ...

  3. 什么是线程线程和进程的区别

    什么是线程线程和进程的区别 线程是进程的一个实体,是cpu调度和分派的基本单位,比进程小可以独立运行的基本单位 一个进程包含多个线程具有独立功能的程序是操作系统进行资源分配和调度的一个独立单位

  4. Linux中线程和进程的区别

    Linux中线程和进程的区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位.例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括 ...

  5. C#中线程和进程的区别

    线程和进程的区别 进程是程序和调度的独立单元 线程是CPU调度的基本单元 一个进程包含一个或多个线程 线程是轻量级的进程

  6. 线程和进程的区别(面试必备)

    参考文章: https://www.jianshu.com/p/2dc01727be45 线程与进程的区别通俗的解释: https://www.jianshu.com/p/8ad441510860 附 ...

  7. 为什么校招面试中总被问“线程与进程的区别”?我该如何回答?

    作者 | 宇宙之一粟 责编 | 徐威龙 出品 | AI 科技大本营(rgznai100) 进程与线程?(Process vs. Thread?) 面试官(正襟危坐中):给我说说"线程&quo ...

  8. 线程和进程的区别和联系

    操作系统任何处理线程 1.先描述一个进程(明确出一个进程上面的一些相关的属性)        操作系统里面主要是通过c/c++来实现的,此处的描述其实就是用的c语言中的"结构体"( ...

  9. 2012-5-3 线程和进程的区别

    进程和线程的区别 http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. ...

  10. Python | 面试必问,线程与进程的区别,Python中如何创建多线程?

    其实关于元类还有很多种用法,比如说如何在元类当中设置参数啦,以及一些规约的用法等等.只不过这些用法比较小众,使用频率非常低,所以我们 不过多阐述 了,可以在用到的时候再去详细了解.我想只要大家理解了元 ...

最新文章

  1. iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)
  2. 009_JMS中的事务
  3. 浅析IT软件项目团队人力资源管理
  4. jquery file upload 后台收到的文件名中文乱码, filename中文乱码
  5. p1164【立方体求和】
  6. matlab 运算程序时间计算
  7. 这回,B站跨年晚会吊打各卫视
  8. ae图片无缝循环滚动_HTML图片滚动
  9. 27 构造连续的ICMP数据包
  10. 微信小程序轮播图实现详解
  11. win10系统通过WSL/WSL2安装各种linux版本,开启图形桌面
  12. 高薪offer,只因做对了这套笔试题
  13. java 翻译 go语言_cgo 和 Go 语言是两码事【已翻译100%】...
  14. 利用Pytorch中深度学习网络进行多分类预测(multi-class classification)
  15. TR069协议向导——一个帮助你了解TR069协议的简明教程(一)
  16. I-Deas TMG 培训资料 (9)
  17. 外汇交易的高风险行为应该如何防范?
  18. 互联网金融公司在信贷风险管理方面,主要面临哪些挑战
  19. Colab平台使用(GPU、挂载、tf版本、运行py脚本、设置点击脚本)
  20. 微信小程序首次进入引导提示自定义组件

热门文章

  1. layoutIfNeeded 就这样把我害惨
  2. DB2数据库用 With语句分隔字符
  3. LC-1186 连续子数组中可删除一个数的最大和
  4. 虚控件在GUI编程中的应用
  5. 【luogu1967】【noip2013】 货车运输 [生成树kruskal LCA ]
  6. 里氏替换原则(Liskov Substitution Principle)
  7. 【模板】线性筛法求素数
  8. 各种边缘检测算子特点比较(canny)
  9. Linux系统中使用netcat命令的奇技淫巧
  10. Windows7 64位下SDK Manager.exe无法运行问题解决方法