• (转)关于进程、线程、并行、并发、阻塞等的理解


    子进程和线程

    1、相同点:

    (a)二者都具有 ID,一组寄存器,状态,优先级以及所要遵循的调度策略。
    (b) 每个进程都有一个进程控制块,线程也拥有一个线程控制块。
    (c) 线程和子进程共享父进程中的资源;线程和子进程独立于它们的父进程,竞争使用处理器资源;线程和子进程的创建者可以在线程和子进程上实行某些控制,比如,创建者可以取消、挂起、继续和修改线程和子进程的优先级;线程和子进程可以改变其属性并创建新的资源。

    2、不同点:

    (a) 线程是进程的一部分, 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
    (b) 启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
    (c)系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。而一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便。
    (d) 与进程的控制表 PCB 相似,线程也有自己的控制表 TCB,但是 TCB 中所保存的线程状态比 PCB 表中少多了。
    (e) 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。

    举个例子:

    进程和线程的区别在于粒度不同, 进程之间的变量 (或者说是内存) 是不能直接互相访问的, 而线程可以, 线程一定会依附在某一个进程上执行. 我举个例子, 你在 Windows 下开一个 IE 浏览器, 这个 IE 浏览器是一个进程. 你用浏览器去打开一个 pdf, IE 就去调用 Acrobat 去打开, 这时 Acrobat 是一个独立的进程, 就是 IE 的子进程. 而 IE 自己本身同时用同一个进程开了 2 个网页, 并且同时在跑两个网页上的脚本, 这两个网页的执行就是 IE 自己通过两个线程实现的. 值得注意的是, 线程仍然是 IE 的内容, 而子进程 Acrobat 严格来说就不属于 IE 了, 是另外一个程序. 之所以是 IE 的子进程, 只是受 IE 调用而启动的而已.
    Linux 系统的实现打破了纯粹的进程与纯粹的线程之间的差异。
    在 Linux 系统下二者是本质一致的。

    附其他

    windows 下,当你设计一个应用程序时,你可能想使用一些需要长时间运行的代码,而又不中继当前正在进行的工作。一个方法是使用线程,将这个工作交由一个线程去执行,如果这些代码在运行过程中发生了错误,它可能会影响所在进程空间的所有线程。第二个方法是建立一个子进程,由这个子进程完成所需工作,这样子进程代码的错误不会影响到父进程的执行。
    子进程与父进程之间可以通过动态数据交换(DDE)、OLE、管道、邮件槽等进行通信,使用内存映射文件是最便利的方法之一。
    当前子进程终止后,子进程句柄变为有信号,父进程可使用 WaitForSingleObject 来等待子进程退出,这样父进程就可使用 GetExitCodeProcess 来获得子进程的退出码。

    参考链接:
    http://blog.csdn.net/ctthuangcheng/article/details/8508820
    http://www.jianshu.com/p/77332a3b07b5
    http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538901&idx=1&sn=d1f7d5461491a9c240f16da6b7c0ced9&scene=4#wechat_redirect

  • 相关阅读:
    Java容器学习之ArrayList
    Java容器学习之List
    个人感悟
    python_批量修改密码综评
    修改的一段递归文件代码
    showtimu
    20190321xlVBA_明细信息表汇总成数据表
    20190320xlVBA_考场座位设置
    RG
    wdVBA_替换删除选择题括号中的选项
  • 原文地址:https://www.cnblogs.com/bvac/p/5413148.html
Copyright © 2020-2023  润新知