线程与进程总结

进程就是程序的一次执行,它占有一片独有的内存空间(如:各app占有独立的内存空间,互相不干扰),可以通过window任务管理器查看进程。线程是进程的一个独立执行单元,是程序执行的一个完整流程,是CPU的最小的调度单元,一个程序可以有多个进程,一个进程也可以有多个线程。需要注意的是:一个进程内的数据可以供其中的多个线程直接共享,但是多个进程之间的数据是不能共享的。

根据线程的数量又可以分为单线程和多线程,和单线程相比,多线程能够提高cpu的利用率,但是确定是:创建多线程开销、线程间切换开销以及死锁与状态同步问题。关于为什么用分线程,以H5 Web Workers的代码为例,下面是主线程的js代码:

var input=document.querySelector('input');
        var btn=document.querySelector('button');
        btn.addEventListener('click',function(){
            var number=input.value;
            //创建一个Worker对象
            var worker=new Worker('Worker.js');
            //绑定接收消息监听
            worker.onmessage=function(event){
                console.log('主线程接受分线程返回的数据');
                alert(event.data);//alert是window的方法,在分线程不能调用
            }
            //向分线程发送消息
            worker.postMessage(number)
            console.log('主线程向分线程发送数据:'+number);
        })

下面是分线程的:

function fl(n){
    return n<=2 ?1 : fl(n-1)+fl(n-2) //递归
}
var onmessage=function(event){
    var number=event.data;
    console.log('分线程接收到主线程发送的数据'+number);
    var result =fl(number);
    postMessage(result);
    console.log('分线程向主线程返回数据:'+result);
}

这是用来显示指定斐波那契数列的数的,计算过程需要时间,使用分线程反而需要更长时间,那么为什么还要用分线程呢?因为如果不用分线程,那么一旦开始计算,那么页面将会死锁,无法进行其他操作,用分线程来进行计算则可以避免这种情况。但需要注意的是分线程中的全局对象不再是window,所以在分线程中不可能更新界面,只有主线程才能更新界面,而且alert是window的方法,在分线程不能调用,所以要写在主线程中。

这次学习计划已经结束,相比于之前学的js,这次学的js高级更加深入,涉及到了程序的执行方式、步骤,有些地方很绕,但是只要细心去一步步推敲,还是能够理解的。关键还是要多敲敲代码,多看看题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值