zoukankan      html  css  js  c++  java
  • 进程和线程

    进程:多任务系统的产物

    很久以前,是没有进程这个东西的。那时候的操作系统只能把要做的工作排好队,做完这件再做下一件,最多也就加个优先级,哪个关系好就先做哪一个。于是那些想一边听歌一边写程序的程序员们便不干了,开始修理那个操作系统,使之能同时运行多个程。于是进程就出现了:它就是一个程序在数据集合上的一次执行。

    因为突然变得僧多粥少了,所以每个进程只好做一些额外的事情:在别人使用之前把自己的东西收拾好,下次轮到自己时再摆出来。为了保存这些额外的东西,进程结构也发生了相应的变化。一个进程被分成三大部分:代码段,数据段和PCB(进程控制块)。

    在多出来的PCB中,我们保存了如下信息:

    进程标识符(操作系统用于识别进程的唯一标识)
    处理机状态(主要是通用寄存器,指令寄存器,PSW和用户栈指针)
    进程调度信息(状态,优先级被阻塞原因和其他一些乱七八糟的东西)
    进程控制信息(同步信息、代码段和数据段信息、资源清单和指向下一下PCB的指针)

    操作系统正是通过PCB来管理这多个进程。这些的系统里,进程既是操作系统独立调度和分派的基本单位,又是一个可拥有资源的独立单位

    线程:进程的再分身

    好了,现在程序员可以一边听歌一边写程序了,可是不幸的或者说幸运的,新的问题出现了。如多个进程间使用很多相同的数据的话,实在是太浪费了。我们当然不能允许这样的事情持续下去,所以线程出现了。同一个进程下可以拥有多个线程,它们共享这个进程的资源,它们之间的切换也不再需要PCB,而只需要极少的一点资源就可以了。在这样的操作系统里,线程变成了系统调度和分派的基本单位。

    简单的说进程和线程有如下不同:

    进程可以拥有资源,线程共享进程拥有的资源
    进程间的切换必需保存PCB,同一个进程的多个线程的切换不用那么麻烦

    最后我们以一个实例来作为本文结束:
    当你在一台PC上打开两个QQ时,每一个QQ是一个进程;而当你在一个QQ上和多人聊天时,每一人聊天窗口就是一个线程。
  • 相关阅读:
    JDBCUtils
    C3P0配置
    反射基本常识(二)
    反射基本常识(一)
    String to Integer (atoi)
    ZigZag Conversion
    Longest Palindromic Substring
    Palindrome Number
    Reverse Integer
    Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/wenming205/p/1834395.html
Copyright © 2011-2022 走看看