【每日一题】进程与线程
人生苦短,总需要一点仪式感。比如学前端~
用户下达运行程序的命令时,就会产生进程
。同一程序可产生多个进程(一对多的关系),来允许同时有很多位用户运行同一程序,却不会相冲突。
进程需要一些资源才能完成的工作,如 cpu 使用时间、存储器、文件以及 I/O 设备,并且依照顺序逐一进行,也就是每个 CPU 核心任何时间内仅能运行一项进程。
进程和线程的区别:
进程是计算机管理运行程序的一种方式,一个进程下可包含一个或多个线程。
也就是说,进程是我们运行的程序代码和占用的资源总和,线程是进程的最小执行单位,当然也支持并发。可以说是把问题细化,分成一个个更小的问题,进而得以解决。
并且进程内的线程是共享进程资源的,处于同一地址空间,所以切换和通信相对成本小,而进程可以理解为没有公共的包裹容器。
但是如果进程间需要通信的话,也需要一个公共环境或者一个媒介,这个就是操作系统。
进程的理解
计算机是由单核、多核的,也有多种的组合方式:
-
单进程
:因为是一个进程,所以某一时刻只能处理一个事务,后续需要等待,体验不佳。 -
多进程
:为了解决上面的问题,但是如果有很多请求的话,会产生很多进程,开销本身就是一个不小的问题,而进程占据独立的内存,这么多响应式的进程难免会有重复的状态和数据,会造成资源浪费。 -
多进程多线程
:由于之前的进程处理事务,改成使用线程处理事务,解决了开销大,资源浪费的问题,还可以使用线程池,预先创建诸多线程,减少创建和销毁线程的开销。但是一个 cpu 某一时刻只能处理一个事务。就像时间分片来调度线程的话,会导致线程切换频繁,是非常耗时的。 -
单线程单进程
:类似 V8,基于事件驱动,有效避免内存开销和上下文切换,只需要线程间通信,即可在适当的时刻进行事务结果的反馈。但是遇到计算量很大的事务,会阻塞后续任务的执行 -
单进程单线程(多进程架构)
:node 提供了 cluster 和 child_process 两个模块进行进程的创建,也就是我们常说的主(Master)从(worker)模式。Master 负责任务调用和管理 Worker 进程,Worker 进行事务处理。
所有《每日一题》的 知识大纲索引脑图 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以点击文末的 “阅读原文” 快速跳转
让我们一起携手同走前端路!
关注公众号回复【加群】即可