由JavaScript单线程引起的对线程与进程、并发与并行、同步与异步知识点的回顾(上)

线程和进程

(1)在概念上

进程是应用程序的执行实例,每一个进程都是由私有的虚拟地址空间、代码、数据和其它系统资源所组成;进程在运行过程中能够申请创建和使用系统资源(如独立的内存区域等),这些资源也会随着进程的终止而被销毁。而线程则是进程内的一个独立执行单元,在不同的线程之间是可以共享进程资源的,所以在多线程的情况下,需要特别注意对临界资源的访问控制。在系统创建进程之后就开始启动执行进程的主线程,而进程的生命周期和这个主线程的生命周期一致,主线程的退出也就意味着进程的终止和销毁。主线程是由系统进程所创建的,同时用户也可以自主创建其它线程,这一系列的线程都会并发地运行于同一个进程中。

(2)在通过一个比喻来进一步理解线程与进程:
一个进程好比是一个工厂,每个工厂有它的独立资源(类比到计算机上就是系统分配的一块独立内存),而且每个工厂之间是相互独立、无法进行通信。每个工厂都有若干个工人(一个工人即是一个线程,一个进程由一个或多个线程组成),多个工人可以协作完成任务(即多个线程在进程中协作完成任务),当然每个工人可以共享此工厂的空间和资源(即同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等))。
到此你应该能初步理解了进程和线程之间的关系,这将有助于我们理解浏览器为什么是多进程的,而JavaScript是单线程。关于这一块的内容将陆续更新。

并发与并行

(1)在概念上:

并发:在操作系统中,是指一个时间段中有几个应用程序都处于已启动运行到运行完毕之间,且这几个应用程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行:在操作系统中,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。

(2)下面有两个形象的比喻帮助我们进一步理解并发与并行:
Erlang 之父 Joe Armstrong 用一张5岁小孩都能看懂的图解释了并发与并行的区别
这里写图片描述
并发(concurrent)是两个队伍交替的使用一台咖啡机,并行(parallel)是两个队伍同时使用两台咖啡机。图可以理解为一个队伍就是一个线程。
还有一个比喻:并发和并行的区别就是一个人同时吃三个馒头(并不是吃完一个再去吃另一个)和三个人同时吃三个馒头。
这里写图片描述
通过并发与并行的认识方便接下来我们讨论同步和异步,鄙人的知识有限并没有进一步深究。
对并发与并行不太理解的可以进一步参考这篇文章:https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/

同步与异步

互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。
同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。
异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。
下面是两篇不错的文章来进一步讲解同步与异步:
https://blog.csdn.net/bryant_liu24/article/details/55506029
https://blog.csdn.net/qq_22855325/article/details/72958345
接下来将进一步回答两个问题:
为什么JavaScript是单线程的呢?
JavaScript的单线程特性如何执行I/O等的耗时操作?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值