多线程、多进程、多协程
进程:一个运行的程序,进程是系统调度和分配的最小单位,拥有自己独立的空间内存,进程之间不共享资源。
线程:CPU调度执行的最小单位,依赖于进程,一个进程至少有一个线程,并且同一个进程内的线程之间共享资源,大大提升了程序运行速度,切换由系统调度。
协程:一种用户态的轻量级线程,切换由用户调度,拥有自己的上下文和栈,切换时将寄存器上下文和栈保存在别的地方,切换回来时,恢复先前的寄存器上下文和栈,直接操作栈基本没有内核的消耗,
所以切换速度较快。
多线程竞争
线程是独立的,多线程之间共享资源,当多个线程访问同一资源时,数据同时被多个线程所占有,导致数据混乱,即数据不安全。为了解决这个问题,那就有了锁。
1. 锁的好处,确保了某段代码只能从头到尾都只能被一个线程占有。
2. 锁的坏处,阻止了线程的并发性,大大降低了程序的运行速度。
多线程与多进程的使用场景
多进程cpu密集型操作
多线程io密集型操作
总结
协程的出现,可以说是解决IO密集型任务时,比线程更加轻量的解决方案