线程并发、同步、通信
线程并发和同步
并发:并发是为了解决多个线程在同一个时刻访问共享资源而带来的数据的不安全性,不稳定性等。
同步:为了解决并发问题,给某个线程赋予指定权限来进行执行。
同步的解决思路是:因为多线程会导致共享资源存在安全问题,那么让多线程在某个时间段中只有单个线程执行,从而避免线程安全问题。
但是这样子操作会降低性能。但是为了数据安全问题,降低性能也是可以接受的。
线程独立和通信
多线程之间可能有关系,也有可能没有关系。
多线程之间没有关系的时候,线程与线程之间是独立的。
多线程之间具备通信能力的时候,多线程之间需要在保证同步的同时,还应该有通信能力。线程之间的通信通常依赖于while循环+锁
线程的上下文切换
线程上下文切换涉及到操作系统级别的,从用户态到内核态的切换过程。
注意:CAS不需要涉及到用户态到内核态切换的过程,仅仅只是用户态进行CAS比较而已。所以效率较高。
线程上下文切换是OS中的CPU来进行转换的,至于是什么时候来进行上下文切换,这个是不可预知的。
一旦发生了线程上下文切换,首先会CPU会保存现场数据,然后CPU将不会给该线程分配执行片,也就是说,程序执行到某个阶段的时候,会卡主。等待CPU再次唤醒的时候,从卡住的地方再次恢复执行。然后再将数据进行恢复。
而原子性操作要么成功,要么失败,这是CAS中加上while循环或者是经常遇到的while循环的关键理解的地方。
从理论中来,到实践中去,最终回归理论