彻底学会Java并发编程——进程与线程,并发与并行

48 阅读2分钟

进程和线程的概念

进程:加载指令、管理内存、管理IO;当一个程序被执行,这个程序的代码被加载到了内存,一个进程就开启了;进程可以看作程序的实例,大部分程序可以有好几个进程(记事本),有些程序只能有一个进程(360)。

线程:一个进程里可以被分为一个或多个线程;一个线程就是一个指令流,指令流把一条条指令交给cpu处理;线程是最小调度单位,进程是最小资源分配单位;windows里进程是不活动的,是装载线程的容器。

进程和线程的对比:不同进程之间是相互独立的,线程存在于进程中,是进程的子集;进程有共享的资源,供其里面的线程共享,例如内存空间;进程间的通信是复杂的,同一台计算机的进程之间的通信是IPC,不同计算机之间进程的通信遵循一些协议,例如HTTP;线程更轻便,切换上下文的成本更低,线程间的通信也更简单。

并发和并行的概念

并发:线程轮流使用CPU,微观串行,宏观并行。同一时间应对多件事情的能力。

并行:多核cpu下,每个核调度运行一个线程。同一时间动手做多件事情的能力。

应用

1 多线程的应用之异步调用:

同步:需要等到结果返回后才能继续运行。

结果:

异步:不用等到结果返回后就能继续运行。

结果:

多线程可以把方法的执行变成异步的,避免阻塞。

例子:

1、项目中,视频文件格式转换等操作比较耗时,可以开一个新线程处理视频转换,避免阻塞主线程。

2、tomcat的异步servlet,让用户线程处理耗时较长的操作,避免阻塞tomcat的工作线程。

3、ui程序中,开线程进行其他操作,避免阻塞ui线程。

2 多线程的应用之提高效率

利用多核cpu的优势提高效率。

测试的时候,基准测试工具选择:JMH。

cpu的核数限制有两个思路:

1、用虚拟机分派合适的核

2、用msconfig,分派合适的核

结论:单核cpu下,多线程不能提高程序运行效率;多核cpu下,有些任务将任务拆分,并行执行,可以提高运行效率,但有些任务不能拆分,例如下一个线程需要用到上一个线程的结果。

3、IO不占用cpu。