进程之基础

1.并行/并发

计算机操作系统定义:

并行性是指两个或多个事件在同一时刻发生;
并发性是指两个或多个事件在同一时间段内发生。

计算机组成原理定义:
并行性包含同时性和并发性,前者是指两个或多个事件在同一时刻发生;
后者是指两个或多个事件在同一时间段内发生。

 

并行(Parallel):当系统有一个以上CPU(多核),则线程的操作有可能非并发.当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行

并发(Concurrent):当有多个线程在操作时,如果系统只有一个CPU(单核),则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态

 

打个比方:

并行:2个人喂2个孩子,两个孩子也同时在吃饭。
并发:1个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。

 

2.线程/进程

2.1进程(Process):具有一定独立功能的程序关于某个数据集合上的一次运行活动

2.2线程(Thread):系统(CPU)进行资源分配和调度的一个独立单位

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态, 多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时, 每个线程还拥有自己的寄存器和栈,其它线程可以读写这些栈内存。

联系:不支持线程机制,进程的系统调度的单位;否则,线程是系统调度的单位

不同:

  • 定义方面:进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径
  • 角色方面:在支持线程机制的系统中,进程是系统资源分配的单位,线程是系统调度的单位。
  • 资源共享方面:进程之间不能共享资源(拥有各自独立堆空间和栈空间),而线程共享所在进程的地址空间(堆空间)和其它资源。同时线程还有自己的栈和栈指针,程序计数器等寄存器(堆空间共享,栈空间独立)
  • 独立性方面:进程有自己独立的地址空间,而线程没有,线程必须依赖于进程而存在。

2.3线程调度:

计算机通常只有一个CPU时候,在任意时刻只能执行一条计算机指令,每一个进程只有获得CPU的使用权才能执行指令。

所谓多线程并发运行,从宏观上看,其实是各个进程轮流获得CPU的使用权,分别执行各自的任务,

那么在可运行池中会有多个线程处于就绪状态等到CPU,JVM就负责线程的调度

JVM采用的是抢占式调度,没有采用分时调度,因此可以能造成多线程执行结果的随机性。

java程序的进程(java的一个程序运行在系统中)至少包含主线程(main)和垃圾回收线程(gc后台线程)。

3.创建进程

    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec("notepad");//只能是系统进程.exe的名字,win+r+dropbox(因为环境变量指定了文件夹 dropbox.lnk)的不行的
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

posted @ 2017-04-12 14:32  曼联  阅读(174)  评论(0编辑  收藏  举报