马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
进程,线程,协程的区别
进程是利用体系中举行资源分配和调理的根本单位,他拥有自己的独立内存空间和体系资源。每个进程都有独立的堆和栈,不与其他进程共享。进程间通讯须要通过特定的机制,如管道,消息队列,信号量等。由于进程拥有独立的内存空间,因此其稳固性和安全性相对较高,但同时上下文切换的开销较大,由于须要生存和规复整个进程的状态
线程是进程内的一个实验单位,也是CPU调理和分派的根本单位。与进程差异,线程共享进程的内存空间,包罗堆和全局变量。线程之间通讯更加高效,由于他们可以直接读写共享内存。线程的上下文切换开销较小,由于只须要生存和规复线程的上下文,而不是整个进程的状态。然而,由于多个线程共享内存空间,因此只须要生存和线程安全的题目,须要通过同步和互斥机制来办理。
协程是一种用户态的轻量级线程,其调理完全由用户步伐控制,而不须要内核的加入。协程拥有自己的寄存器上下文和栈,但与其他协程共享堆内存。协程的切换开销非常小,由于只须要生存和规复协程的上下文,而无需举行内核级的上下文切换。这使得协程在处理处罚大量并发任务时具有非常高的服从。
进程的状态
进程有着运行-停息-运行的活动规律,一样平常来说,一个进程并不是自始至终一连不绝地运行的,他与并发实验中的其他进程的实验是相互制约的。
在一个进程的活动期间至少具备三种根本状态,即运行状态,停当状态,壅闭状态。
创建状态:一个新进程被创建时的第一个状态
停当状态:当进程被创建完成并初始化后,统统停当预备运行时,变为停当状态。
运行状态:处于停当状态的进程被利用体系的进程调理器选中后,就分配给CPU正式运行该进程
壅闭状态:当进程哀求某个事故且必须等候时,比方哀求I/O事故
挂起状态:在假造内存管理的利用体系中,通常会把壅闭状态的进程的物理内存空间换出到硬盘,等须要再次运行时,再从硬盘换入到物理内存,形貌进程没有占用实际的物理内存空间的情况,这个状态就是挂起状态。
挂起状态分为两种:
壅闭挂起状态:进程在外存并等候某个事故的出现
停当挂起状态:进程在外存,但只须要进入内存,立刻立刻运行
僵尸进程
父进程创建子进程为客户服务,当子进程退出时,实际上内核里还会生存该进程的一些信息,也是会占用内存的,如果不做好接纳工作,就会变成僵尸进程。随着僵尸进程越多,会徐徐耗尽我们的体系资源
当子进程停止时,其在父进程处继续的资源应当还给父进程。当父进程被停止时,该父进程的子进程就会变味孤儿进程,会被一号进程收养,并由1号进程对他们完成状态网络工作
自旋锁
自旋锁是通过CPU提供的CAS函数,在用户态完成加锁息争锁利用,不会自动产生线程上下文切换,以是相比互斥锁来说,会快一些,开销也小一些。CAS函数是将查察锁状态是否空闲,将锁设置为当火线程持有两个步调形成一条原子指令。利用自旋锁的时间,当发生多线程竞争锁的情况,加锁失败的线程会忙等候,直到他拿到锁。这里的忙等候可以用while循环等候实现,不外最好是利用CPU提供的PAUSE指令来实现忙等候,由于可以镌汰循环等候时的耗电量。
数组和链表区别
访问服从:数组可以通过索引直接访问任何位置的元素,访问服从高,时间复杂度为O(1),而链表须要重新节点开始遍历到目的位置,访问服从较低,时间复杂度为O(n)
插入和删除利用服从:数组插入和删除利用大概须要移动其他元素,时间复杂度为O(n),而链表只须要修改指针指向,时间复杂度为O(1)
缓存掷中率:由于数组元素在内存中一连存储,可以进步CPU缓存的掷中率,而链表节点不一连存储,大概导致CPU缓存的掷中率较低,频仍的缓存失效会影响性能
TCP头部格式
源端标语(16位) 目的端标语(16位) 序列号(32位) 确认应答号(32位) 首部长度(4位) 生存6位 窗口巨细(16位) 校验和(16位) 告急指针(16位)
拥塞控制
慢启动:TCP在刚创建毗连完成后,起首是有个慢启动的过程,这个慢启动的意思就是一点一点的进步发送数据包的数量。当发送方每次收到一个ACK,拥塞窗口cwnd的巨细就会加1
拥塞克制:当拥塞窗口高出慢启动门限就会进入拥塞克制。他的规则是每个收到一个ACK时,cwnd增长1/cwnd,由指数增长变成线性增长
拥塞发生时会有重传机制,超时重传是ssthresh设为cwnd/2,cwnd重置为1。快速重传是当继承方发现丢了一个中央包的时间,发送三次前一个包的ack,于是发送端就会敏捷地重传,不必等候超时再重传
快速规复算法如下:
拥塞窗口cwnd=ssthresh+3
重传丢失的数据包
如果再收到重复的ACK,那么cwnd增长1
如果收到新数据的ACK后,把cwnd设置为第一步中的ssthresh的值,缘故原由是该ACK确认了新的数据,阐明从duplicated ACK时的数据已经收到,该规复过程已经竣事,规复到原来的状态
缺页停止
利用体系以page为单位管理内存,当进程发现须要访问的数据不在内存时,利用体系大概将数据以页的方式加载到内存中。上述过程称为缺页停止,当利用体系发生缺页停止时,就会通过体系调用将page再次读到内存中
UDP和TCP有区别吗
UDP不提供复杂的控制机制,利用IP提供面向无毗连的通讯服务
UDP协议真的非常简朴,头部只有8个字节
TCP是面向毗连的传输层协议,传输数据前先要创建毗连。UDP是不须要毗连,立刻传输数据
TCP是一对一的两点服务,即一条数据只有两个端点
UDP支持一对一,一对多,多对多的交互通讯
TCP是可靠交付数据的,数据可以无不对,无丢失,不重复,按序到达。
UDP是尽最大积极交付,不包管可靠交付数据。
TCP有拥塞控制和流量控制机制,包管数据传输的安全性
UDP则没有,纵然网络非常堵塞,也不会影响UDP发送服从
TCP首部长度较长,会有肯定的开销
UDP首部只有8个字节,而且是固定稳定的,开销较小
TCP是流式传输,没有边界,但包管次序和可靠
UDP是一个包一个包的发送,是有边界的,但大概会丢包和乱序
TCP的数据巨细如果大于MSS巨细,则会在传输层举行分片,目的主机收到后,也同样在传输层组装TCP数据包,如果中途丢失了一个分片,只须要传输丢失的这个分片
UDP的数据巨细如果大于MTU巨细,则会在IP层举行分片,目的主机收到后,在IP层组装完数据,接着再传给传输层
线程同步的方式
锁:加锁,解锁利用
任何进入临界区的线程,必须先实验加锁利用。若加锁利用顺遂通过,则线程可进入临界区,在完成对临界资源的访问再实验解锁利用,以开释该临界资源
信号量:P,V利用
信号量体现资源的数量,对应的变量是一个整形的变量,接纳P利用,变量减一,如果变量<0,则进程和线程进入壅闭等候,否则继续,表明P利用大概会壅闭。接纳V利用,变量加1,唤醒一个等候中的线程。
关系型数据库和非关系型数据库区别
关系型接纳二维表结构非常贴近正常开辟逻辑
支持利用SQL结构化查询语句
数据全部由表结构构成,文件格式划一
非关系型数据库存储数据的格式可以是key-value情势,文档情势,利用机动
速率快,服从高,nosql可以利用硬盘大概随机存储器作为载体,而关系型数据库只能利用硬盘
参考资料
小林coding
|