进程、线程、协程有什么区别
进程通俗理解一个运行起来的程序或者软件就叫进程,可以理解进程就是负责获取系统资源,他是操作系统分配资源的基本单位
线程是依附于进程里面的,线程是cpu调度的基本单位,同一个进程间的线程共享同一片内存空间,线程之间通信主要使用共享内存。
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。
进程之间如何通信
- 管道,例如Linux中的
|
- 消息队列
- 共享内存
- 信号量
- Socket
不同的语言是如何实现协程这个概念的
一文看懂Go语言协程的设计与原理 - 掘金 (juejin.cn)
从浏览器发送一次请求后,经历了什么
- 使用DNS协议获取服务器IP地址。
- 把请求的数据组织成HTTP的Start Line、Body 和 Headers, HTTP的数据组织完成,发送到TCP处理。
- TCP进行三次握手建立连接(也可以复用已建立的连接)。HTTP的数据可能会分成多个TCP Segment(TCP的数据包叫TCP Segment), 每个TCP Segment都会加上TCP的Headers,以实现TCP的能力(保证可靠),之后TCP Segment发送到IP层。
- (可选)如果使用了HTTPS,这里会在TCP的基础上建立TLS连接。在HTTP 和 TCP之间,TLS要进行数据的加密和解密。
- IP层拿到TCP Segment之后,加上IP层的Headers(提供了实现路由协议的数据),组织成IP Packet(IP层的数据包叫IP Packet), 然后发到MAC层。
- MAC层拿到IP Packet后, 加上MAC层的Headers, 组织成Ethernet Frame(MAC层以太网数据包叫Ethernet Frame), 通过硬件网卡发出去。
- 经过中间设备的转发,最终到达服务器,然后一层一层地去掉Headers,向上传输,直到应用层。
单体服务和微服务的优缺点
单体服务优缺点:
- 优点:部署简单、技术单一
- 缺点:系统启动慢,系统错误隔离性差,可伸缩性差(只能对整个应用扩容,不能对某个核心功能点进行扩展)
微服务优缺点:
- 优点:易于开发和维护,只用专注于一个特定业务功能开发,微服务之间技术栈不受限制,按需进行收缩,局部修改易部署。
- 缺点:运维成本高,调用复杂性高,分布式事务等。
为什么Go的协程使用通道来进行通信
目前未找到特别好的资料
项目中遇到了什么难点
nlp
索引有哪些设置原则,优化原则
背下网上数据库的相关面试题就好拉