(三)应该了解关于并发相关的概念
3.并发相关的概念
3.1同步和异步
同步和异步通常用来形容一次方法调用。同步方法调用一开始,调用者必须等待被调用的方法结束后,调用者后面的代码才能执行。而异步调用,指的是,调用者不用管被调用方法是否完成,都会继续执行后面的代码,当被调用的方法完成后会通知调用者。比如,在超时购物,如果一件物品没了,你得等仓库人员跟你调货,直到仓库人员跟你把货物送过来,你才能继续去收银台付款,这就类似同步调用。而异步调用了,就像网购,你在网上付款下单后,什么事就不用管了,该干嘛就干嘛去了,当货物到达后你收到通知去取就好。
3.2并发与并行
并发和并行是十分容易混淆的概念.并发指的是多个任务交替进行,而并行则是指真正意义上的"同时进行".实际,如果系统内只有一个CPU,而使用多线程时,那么真实系统环境下不能并行,只能通过切换时间片的方式交替进行,而成为并发执行任务.真正的并行也只能出现在拥有多个CPU的系统中.
3.3线程的定义和理解
传统语言C++,Java等线程其实与操作系统线程是1:1的关系,每个线程都有自己的Stack,Java在64位系统默认Stack大小是1024KB,所以指望一个进程开启上万个线程是不现实的。但是实际上我们也不会这么干,因为起这么多线程并不能充分的利用CPU,大部分线程处于等待状态,CPU也没有这么核让线程使用。所以一般线程数目都是CPU的核数.
3.4阻塞和非阻塞
阻塞和非阻塞通常用来形容多线程间的相互影响,比如一个线程占有临界区资源,那么其他线程需要这个资源就必须进行等待该资源的释放,会导致等待的线程挂起,这种情况就是阻塞,而非阻塞就恰好相反,它强调没有一个线程可以阻塞其他线程,所有的线程都会尝试地往前运行.
3.4临界区
临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用.但是每个线程使用时,一旦临界区资源被一个线程占有,那么其他线程必须等待.