进程与线程

82 阅读3分钟
进程与线程
进程:
    是程序的第一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,至少有5种基本状态,分别是:初始态,执行态,等待状态,就绪状态,终止状态。

线程:
    线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

关系:
    线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

线程与进程的区别

根本区别:
    进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位。
    
在开销方面:
    每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会造成较大的开销,线程可以看成轻量级的进程,同一类线程共享数据和代码空间,每个线程都有自己独立的运行站和程序计数器(pc),线程之间切换的开销小。

所处环境:
    在操作系统中能同时运行多个进程(程序),而在同一个进程中有多个线程同时执行(通过CPU钓鱼,在每个时间片中只有一个线程执行)

内存分配方面:
    系统在运行的时候会为每个进程分配不同的内存空间,儿对线程而言,除了CPU外,系统不会为线程分配内存(县城所使用的资源来自其所属进程的资源),线程组之间只能共享资源
Web Worker的作用
    就是为JavaScript创建多线程环境,允许主线程创建Worker线程,将一些任务分配给后者运行。在主程序运行的同时,Worker线程在后台运行,两者互不干扰。等到Worker线程完成计算任务,再把结果返回给主线程,这样做的好处是,一些计算密集型或高延迟的任务,被Worker负担了,主进程(通常负责UI交互)就会很流畅,不会被阻塞或者拖慢。
  
     Worker线程一旦新建成功,就会始终运行,不会被主线程上的活动(童虎点击按钮,提交表单)打断。这样有利于随时响应主线程的通信。但是也造成了Worker比较耗费资源,不应过度使用马尔切一旦使用完毕就应该关闭      
Web Worker有以下几个使用注意点
   同源限制
       分配给Worker线程进行的脚本文件,必须与主线程的脚本文件同源。
   DOM限制
       WOrer线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的DOM对象,也无法使用document、window、parent这些对象。但是,Worker进程可以navigation对象和location对象。
   通信联系
        Worker线程和主线程不在同一个上下文环境,他们不能直接通信,必须通过消息完成。
   脚本限制
        Worker线程不能执行alert()方法和confirm()方法,但可以使用XMLHttpRequest对象发出AJAX请求。
   文件限制
         Worker线程无法读取本地文件,即不能打开本机的文件系统,它所加载的脚本,必须来自网络。         

worker创建对象:worker()构造函数创建一个Woker