1.上下文切换
列举多线程的使用场景?
写后读:(增删改查本质都是读和写:增删改属于写操作,查属于读操作)多个线程对同一个变量进行读写操作,其中一个线程执行完写操作(增删改),其他任何一个线程都是基于上一个线程写成功之后的基础上进行读操作
volatile只保证读是最新,不保证写是最新,写的时候有可能其他线程已经写了产生覆盖
synchronized保证读写最新,读写过程中其他线程不可以操作
ReentrantLock类对象可以随时对代码块加锁和释放锁(lock()和unlock())
同步和异步:同步:排队先后读写某个资源 异步:不用排队读写资源互不干扰
一般开启几个或者几十个线程性能最佳,具体多少个线程看场景做测试
synchronized(A){代码}:上锁只有当前线程可以访问A其他线程不能访问A,解锁,当代码块里的代码执行完的时候其他线程才能访问A;这种语法不能锁基本类型,只能锁引用类型
什么是中断机制?举一个中断响应的例子。
操作系统需要管理外设,但是外设的速度远远低于CPU的速度,所以我们需要一种机制来弥补这种速度鸿沟,提高CPU的效率。
为此我们引入了中断机制,让外设在需要操作系统处理外设相关事件的时候,能够主动通知操作系统,即打断操作系统和应用的正常执行,让操作系统完成外设的相关处理,然后在恢复操作系统和应用的正常执行。
当CPU收到中断或者异常的事件时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理例程中,在完成对这个事件的处理后再跳回到刚才被打断的程序或任务中。
什么是内核态?什么是用户态?
内核态:处于内核态的 CPU 可以访问任意的数据,包括外围设备,比如网卡、硬盘等,处于内核态的 CPU 可以从一个程序切换到另外一个程序,并且占用 CPU 不会发生抢占情况,一般处于特权级 0 的状态我们称之为内核态。
用户态:处于用户态的 CPU 只能受限的访问内存,并且不允许访问外围设备,用户态下的 CPU 不允许独占,也就是说 CPU 能够被其他程序获取。