一、进程、线程、协程有什么区别?
1.进程:进程是操作系统中独立运行的程序实例,每个进程都有自己的内存空间和系统资源;进程之间相互独立,每个进程有自己的内存地址空间,一个进程无法直接访问另一个进程的内存;适用于需要高隔离性和安全性的场景,适合多核并行计算,但资源开销大。
2.线程:线程是进程中的一个执行单元,一个进程可以包含多个线程,线程共享进程的内存空间和资源;同一进程内的线程共享相同的内存地址空间,因此可以直接访问彼此的数据,但也因此可能导致数据竞争和不一致;
3.协程:协程是一种轻量级的线程,它们被设计为可以在程序中自愿让出执行权,不需要操作系统内核的参与;协程在同一个线程内运行,所有协程共享同一个线程的内存空间;适用于I/O密集型任务和需要大量并发但计算量较小的场景,资源开销最小,但无法利用多核CPU处理。
二、进程之间的通信方式有哪些?
1.管道:无名管道(单向通信,仅用于具有亲缘关系的进程);有名管道(可用于无亲缘关系进程间双向通信)。简单且适合线性通信,但不适合复杂的多进程通信。
2.消息队列:消息队列是一种消息链表,存储在内核中,每个消息都有一个类型标识符,可以被不同进程读取。适合需要按消息类型进行筛选和排序的通信。
3.共享内存:多个进程可以直接访问同一块内存区域,这是最快的一种进程间通信方式,因为数不需要内核和用户之间复制。速度最快,但需要额外的同步机制。
4.信号量:主要用于同步,防止多个进程同时访问共享资源而导致数据不一致。主要用于同步控制,而非数据交换。
5.信号:信号是一种通知机制,用于告诉进程某个事件已经发生。适合简单的事件通知,但不适合大量数据传输。
6.套间字:不仅支持同一主机上的进程间通信,还支持不同主机上的进程间通信,通常用于网络通信。适合网络通信和跨主机的进程通信。
7.文件:进程可以通过读写同一个文件进行通信。简单但效率低下,适合持久化数据存储。
8.进程可以将同一个文件映射到它们的地址空间,从而共享该文件的内容。高效处理大文件,但实现较为复杂。
三、前端发起请求之后到达后端,中间过程是什么?
用户发起请求----DNS解析获得服务器IP地址----建立TCP连接----发送HTTP请求----服务器接收并解析请求----后端应用处理请求----进行数据库操作----生成并发送HTTP响应----浏览器接收并解析响应----渲染页面并更新用户界面