关于进程和线程,js单线程和node事件循环的理解

1.进程和线程

进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位,线程开销少,易于调度,可以提高并发性。
进程和线程的关系

进程和线程的联系

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。

(3)处理机分给线程,即真正在处理机上运行的是线程。

(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

举例:浏览器中,主要包括四个进程:Browser主进程,第三方插件进程,GPU进程,浏览器的渲染进程。每打开一个tab页,就会创建一个进程。而在tab中进行的操作,如js解析,如向服务器发送请求,则是属于这个进程中的一个线程中的操作。
浏览器渲染进程是多线程的,主要包括GUI渲染线程(包括解析html,css等),js引擎线程,事件触发线程,定时触发器线程,异步http请求线程。GUI线程和js线程是互斥的,当js引擎执行时GUI线程会被阻塞。事件触发线程会把任务存储在队列中,排队等js线程空闲时处理。定时触发器线程会进行计时并触发setIntervel和setTimeOut定时,触发后放在队列中等待js引擎处理。异步http请求线程,在XMLHttpRequest在连接后是通过浏览器新开一个线程请求,将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入事件队列中。再由JavaScript引擎执行。

事件循环

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复