进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

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

关于IPC(进程间通信)

由于多进程要并发协调工作,进程间的同步,通信是在所难免的。

稍微列举一下linux常见的IPC.

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的变种都支持套接字。

或许你会有疑问,那多线程间要通信,应该怎么做?前面已经说了,多数的多线程都是在同一个进程下的,它们共享该进程的全局变量,我们可以通过全局变量来实现线程间通信。如果是不同的进程下的2个线程间通信,直接参考进程间通信。

 

 

转载于:https://www.cnblogs.com/zhangpengme/archive/2012/10/28/2743883.html

进程和线程的区别【转】相关推荐

  1. Linux进程与线程的区别 详细总结(面试经验总结)

    首先,简要了解一下进程和线程.对于操作系统而言,进程是核心之核心,整个现代操作系统的根本,就是以进程为单位在执行任务.系统的管理架构也是基于进程层面的.在按下电源键之后,计算机就开始了复杂的启动过程, ...

  2. 进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈...

    进程和线程的区别?什么时候用进程?什么时候用线程? 答:首先得知道什么是进程什么是线程? 我的理解是进程是指在系统中正在运行的一个应用程序:程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的 ...

  3. Linux进程与线程的区别

    2019独角兽企业重金招聘Python工程师标准>>> Linux进程与线程的区别 cnyinlinux 本文较长,耐心阅读,必有收获! 进程与线程的区别,早已经成为了经典问题.自线 ...

  4. 谈谈进程和线程的区别

    进程和线程的区别是面试提问频率最高的问题,没有之一. 我们首先了解一下进程和线程的概念. 进程:一个进程就是一个正在执行程序的实例. 线程:操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进 ...

  5. 进程与线程的区别(面试题)

    进程与线程的区别 1.进程是资源分配最小单位,线程是程序执行的最小单位: 2..进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段.堆栈段和数据段,线程没有独立 ...

  6. task.run 强制结束线程_图文介绍进程和线程的区别

    点击蓝色"最码农"关注我哟 加个"星标",每天下午18:03,一起学技术 进程和线程的概念 先了解一下操作系统的一些相关概念,大部分操作系统(如Windows. ...

  7. 进程与线程的区别和联系

    概念 进程 进程(Process )是指计算机中已运行的程序.进程曾经是分时系统的基本运作单位.--维基 · 进程是正在执行的程序: · 进程是可以分配处理器并由处理执行的实体: 线程 线程(Thre ...

  8. 进程和线程的区别, 面相对象补充, 进程, 数据共享, 锁, 进程池, 爬虫模块(requests, bs4(beautifulsoup))...

    一. 进程和线程的区别?     第一:         进程是cpu资源分配的最小单元.         线程是cpu计算的最小单元.     第二:         一个进程中可以有多个线程.   ...

  9. [Java]进程与线程的区别(转)

    [Java]进程与线程的区别(转) 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自 ...

最新文章

  1. 探索强化学习算法背后的思想起源!
  2. 【 Notes 】Categories of Wireless Local Positioning Systems
  3. Android Architecture Components 整理
  4. 明明白白你的Linux服务器——硬件篇
  5. 设计模式的理解:桥模式 Bridge
  6. boost::hana::keys用法的测试程序
  7. 家用电脑配置_游戏搬砖必看教程,游戏工作室电脑如何配置
  8. redis为什么选择单线程工作模型
  9. tar (child): bzip2: Cannot exec: No such file or directory
  10. 7-Arco大讲堂(二)
  11. Linux基金会呼吁厂商放弃微软FAT文件系统
  12. MT4API跟单、外汇API跟单接口详解
  13. 今天使用overleaf生成个人简历
  14. 不要奇怪 XP震网病毒缺陷或为2014最大软件漏洞
  15. 黑莓装Linux系统,“黑莓的Linux桌面管理器”──Barry的使用
  16. hive的join,left join,right join,full outer join,left semi join,cross join
  17. Android Stidio修改桌面图标
  18. 安全测试(三) 服务器安全 渗透测试 常规服务器安全漏洞 高危端口暴露、弱口令密码、暴力破解、服务器提权、Mysql数据库提权等 浅谈《社会工程学》实战案例
  19. MongoDB 3.2.7 for rhel6.4 副本集-分片集群部署
  20. Cadence Allegro添加尺寸标注图文教程及视频演示

热门文章

  1. python flask服务器假死_python – Flask POST请求导致服务器崩溃
  2. php正则循环,PHP正则解析多重循环模板示例
  3. 树莓派java 控制摄像头_在树莓派上使用动作进行网络摄像头流媒体问题
  4. 无法从elasticsearch节点检索版本信息_【Elasticsearch 7 搜索之路】(一)什么是 Elasticsearch?...
  5. Matrix(二维树状数组)入门第一题
  6. java 解析 ical_ical4j 实现ICS文件的生成和解析
  7. vim java自动补全_java – eclim没有在vim中做自动完成
  8. oracle存储过程转mysql存储过程修改方法
  9. java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc
  10. php 字符串分割出数字,php 字符串分割函数的总结