1.进程和线程的关系?
- 从数量来看:一个程序至少一个进程,一个进程可以有多个线程。
举例来说:JAVA当我们启动main函数就启动了一个JVM进程,而main函数所在的线程就是该进程所属的线程,也叫主线程,当然也可以开启多个线程。
- 从资源来看:进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位。线程是进程中可单独执行的最小单位。同一个进程中的所有线程共享该进程的资源(如内存空间和文件句柄)
举例来说:main函数就启动了一个JVM进程,会创建所有线程共享堆和方法区资源,同时每个线程拥有自己的资源,程序计数器,方法栈。
最后线程所要完成的工作叫任务。
2. 并发,并行,傻傻分不清?
先看这个图:
- 从软件的角度来看:并发就是在一段时间内以交替形式完成多个任务。而并行就是齐头并进的方式完成多个任务。
- 从硬件的角度来看:处理器一次只能运行一个线程,如果要实现 同一段时间内运行多个线程(并发),处理器是以时间片分配的技术来实现的,即给每个线程分配时间片,时间片结束,保存该线程状态,线程切换,执行下一个时间片的线程。而如果要实现并行,一个处理器不行,需要在同一时刻,多个处理器各自处理一个线程。