多线程的概念:
回顾一下进程。一个进程在某一时刻只能处理一个事情,比如播放音乐,所以一个进程其实可以看成只有一个控制线程。但是单一的进程很难满足实际的业务需求,如服务器可能同时需要响应几千上万个用户的访问,如果都是进程来处理,那计算机就会很卡,这时候线程就粉墨登场了,面对多个用户同时访问的情况,首先要做到计算机的性能足够好,其次计算机需要开辟对应数量的线程用于处理响应,如果做不到服务器就极有可能崩溃,比如曾经春运期间的购票网站,以及NBA球员季后赛时投进绝杀球导致某论坛崩溃。这时候就涉及到多线程设计的问题。
在一个进程里,可以并发出多个线程,每条线程都可以执行不同的任务。当然所谓的并发其实只是肉眼所见的同时进行,实际是CPU(中央处理器)在任务调度,进行任务切换,用白话说就是这1ms在处理a线程的任务,下一个1ms就去处理b线程的事情,然后到c线程,最后又回到a线程。只是时间间隔特别短,让用户觉得是同时进行的。这时候CPU就相当于一个大脑,如果我们一边看书,一边玩游戏,大脑就会转不过来。所以,多核CPU就诞生了,不过经常会出现比如一核处理,多核围观的情况。所以多线程的就更加重要了。
在这里说一下我对并发和并行的理解:
并发,即系统轮流做不同的事情。比如,一个机器在1秒内,可以在唱歌、跳舞、背诗词...等事情中来回切换交替’进行,强调“同一时间间隔内”。
并行,就是系统同时做不同的事情。打个比方就是,人一边看书,一边哼歌,强调“同一时刻”。
线程的几种同步方式:
所谓线程同步,就是当一个线程在操作某块内存的的时候,其余的线程不能操作该地址,等到该线程完成操作以后,其他线程才能通过竞争的方式操作该内存。剩下的线程会继续等待,直到该线程操作完毕。
1)互斥锁
2)条件变量
3)信号量
4)临界区