进程和线程
什么是进程?
可以简单的认为一个应用程序就是一个进程,不过有些应用程序会启动多个进程,即一个应用程序至少会启动一个进程,在windos系统上面通过任务管理器可以查看计算机上正在启动的进程。
进程和进程之间的内存是独立的,这样可以提高应用程序的稳定性和安全性。
什么是线程?
线程是进程中的一个执行场景,一个进程可以启动多个线程
使用多线程的可以提高CPU的使用率,不是提高执行速度。
比如一个程序要从本地硬盘中读取和处理文件,假设从硬盘读取一个文件要用6秒,处理一个文件用2秒,如果处理两个文件需要使用16秒:
6秒读取文件A
2秒处理文件A
6秒读取文件B
2秒处理文件B
在磁盘读取文件时,CPU是在等待磁盘读取数据,此时CPU是空闲的,一秒钟的时间对于CPU来说可以做非常多的事情,可以利用这段空闲时间去做别的事情,来改变一下上面程序的操作顺序:
6秒读取文件A 6秒读取文件B + 2秒处理文件A(利用CPU空闲时间) 2秒处理文件B
这样一共需要14秒就可以完成上面操作
这里其实是通过提高CPU的利用率来减少了操作时间
线程和线程之间共享堆内存和方法区,栈内存是独立的,每个线程有自己独立的栈
多线程的应用场景:
qq多人视频
迅雷同时下载多个文件
并行和并发
并行就是两个或两个以上的任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)
并发是指两个或两个以上的任务都请求运行,而CPU只能接受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。
多线程的缺点
- 设计复杂
多线程中共享堆内存和方法区,因此里面的一些数据是可以共享的,在设计时要确保数据的准确性 - 资源消耗增多
栈内存是不共享的,如果启用多个线程的话会占用更多的内存
使用多线程可以提高CPU的使用率,但并不意味着线程越多越好,在编写程序时需要掌握好一个平衡点,这样才能够体现出多线程的价值。