获取中...

-

Just a minute...

avatar

什么是进程

在百度百科中,进程有两种定义,一种是狭义定义:进程是正在运行的程序实例,比如微信、Tomcat、MySQL,这些就是一个个进程。另一种就是广义的定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是操作系统动态执行的基本单元。在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程主要有两个特点,一是进程是一个实体,操作系统会为它分配独立的地址空间,二是进程是一个执行中的程序,程序是没有生命的实体,只有当处理器赋予它生命,它才是一个活动的实体,这个实体才叫做进程。

进程的来由

最初计算机被设计出来是为了解决数学计算问题的,当用户输入特定的指令,计算机执行一个操作,在用户输入指令或思考等耗时的操作时,计算机是一直处于等待的状态,这样显然是浪费计算机资源的表现,计算机的使用效率特别的低。

后来,为了解决这个问题,出现了批处理操作系统。在批处理操作系统中,用户可以预先准备需要执行的一系列操作指令以及数据,一次性的让计算机执行,这样减少了用户设计、输入指令和数据的时间,进一步提升了计算机的使用效率。

但是,人们发现这样的设计还是存在一些问题,比如,当程序执行的过程中需要进行IO操作,而IO操作需要消耗的CPU资源是比较少的,大部分都是分派给DMA完成的。所以在这一段时间内,CPU是一直处于等待状态的。于是人们想,如果在执行IO操作的时候,是否可以让另一个任务执行,当IO操作完成,暂停当前的任务,在回到原来的任务继续执行。当然,这里存在着许多的问题,比如如何区分每个任务的的数据,当程序暂停后,如何保存之前的运行状态。

于是,进程的概念就出现了。上面说了,进程就是一个运行的程序实例,操作系统会为它分配一定的内存空间,这样每个程序之间就不会有数据干扰问题,并且进程会保存程序的运行状态,这样就可以进行进程的切换,当进程恢复的时候,就可以读取到之前的运行环境。

什么是线程

线程是程序执行流的最小单元,是一个单一的顺序控制流程。它是进程中的一个实体,是被系统独立调度和分派的基本单元,线程自己不拥有系统资源,但它可以和同属一个进程的其他线程共享进程的所有资源。

线程的来由

进程的出现极大的提高的计算机的工作效率,让程序可以在计算机中并发的运行,但是就一个独立的进程来看,其使用效率并不高效,因为进程还是一个顺序的执行体,一旦其中的某个操作需要耗时很久,进程就必须处于等待的状态。当线程出现之后,我们可以把那些耗时的操作放在一个线程中处理,程序还可以做其他的事情。

多线程

由于进程之间是独立的内存空间,不共享资源,所以多个进程的时候不需要考虑任何问题。但是对于一个进程中的多个线程,由于线程是共享进程中的所有资源的,所以如何让进程中的资源被多个线程正确的访问是我们在进行多线程设计中需要深入考虑的问题。

相关文章
评论
分享
  • Java多线程之同步容器

    同步容器的作用Java中的容器主要为List、set、Map、Queue,这些容器都有不同的实现类,比如ArrayLIst、HashSet、HashMap、PriorityQueue等等,但是大部分都是非线程安全的,意味着在多线程访问...

    Java多线程之同步容器
  • Java多线程之ThreadLocal

    ThreadLocal的作用ThreadLocal的作用是提供线程内的局部变量,这个变量在同一个线程的生命周期内起作用,可以减少同一个线程内多个方法之前传入公共资源的复杂性,并且隔离其他线程。下面是一个使用ThreadLocal的例子...

    Java多线程之ThreadLocal
  • Java多线程之Lock

    引入Lock的原因Java提供了一个关键字synchronized用来保证同步访问,那为什么还需要使用Lock?最根本的原因就是使用synchronized会造成线程的阻塞,资源同时只能被一个线程访问,程序效率低。比如,多个线程查询读...

    Java多线程之Lock
  • Java多线程之synchronized

    多线程引发的安全问题由于线程是共享进程中的所有资源的,那么每个线程都可以去操作进程中的某一个资源,当多个线程操作同一个资源的时候就可能出现线程安全问题。比如两个线程对同一个实例变量做加1的操作,然后打印该变量,如果变量的初始值为0,当...

    Java多线程之synchronized
  • Java中的线程的创建

    Java创建线程的三种方式 继承Thread 实现Runnable 实现Callable 继承Thread创建线程通过继承Thread的方式,可以很快的创建一个线程,Thread中有一个run()方法,只需要重写该方法,将需要另外开...

    Java中的线程的创建
  • Redis过期策略和内存淘汰策略

    Redis处理过期的keyRedis会将每个设置了过期时间的key保存在一个独立的字典中,以后会定期扫描这个字典来删除过期了的key。除了定期扫描删除策略之外,Redis同时采用惰性删除策略,在客户端访问key的时候,Redis会对这...

    Redis过期策略和内存淘汰策略
  • Redis持久化:AOF

    什么是AOF持久化Redis有两种持久化方式,RDB和AOF。RDB是将Redis中的数据保存一份到RDB文件中,而AOF不是保存键值对数据,而是保存服务器执行的写命令来记录数据库的状态。 AOF持久化的实现原理AOF持久化的实现可...

    Redis持久化:AOF
  • Redis持久化:RDB

    什么是RDB持久化RDB持久化是Redis的持久化方式之一,也被称为快照持久化,是将某一个时间节点的Redis内存中数据保存到磁盘上,生成一个RDB文件。之后,用户可以将这份文件进行备份,复制到其他的服务器上创建具有相同状态的Redi...

    Redis持久化:RDB
  • jps命令详解

    jps命令的作用jps命令是JDK中自带的命令,位于bin目录下,其作用是显示当前用户下系统中所有的Java进程的相关信息,比如pid。有了这个命令,可以很方便的显示Java进程,不过显示的是当前用户的所有Java进程,不能根据项目名...

    jps命令详解
Please check the parameter of comment in config.yml of hexo-theme-Annie!