看了java3y写的文章发现多线程真的是重要但初学阶段接触的少。
但多线程确确实实离我们很近,只是我们感觉不到,很多时候都是框架帮我们屏蔽掉了。
进程和线程
进程
进程是程序的一次执行,进程是一个程序及其数据在处理机上顺序执行时所发生的活动,进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。每个进程都有自己的内存空间和系统资源。
线程
既然有了进程又为什么还要线程呢?在没有线程的时候我们要想实现多个功能就必须打开多个进程,进程实现多处理机环境下的进程调度,分派,切换时,都需要花费较大的时间和空间开销。又或者是我们要执行很多任务,只能让进程一个一个地执行。所以为了提高效率,人们提出了线程的概念。
引入线程是为了提高系统的执行效率,减少处理机的空转时间和调度切换的时间,以及便于系统管理。
进程让操作系统的并发性成为了可能,而线程让进程的内部并发成为了可能。
两者的区别
进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O)
- 进程单独占有内存空间,不同进程间的内存存在隔离的情况,数据分开,数据共享困难但同步简单。线程之间共享同一进程直接的内存和数据,所以数据共享简单但通信困难。
- 进程直接使用不同的内存空间,所以一个进程出现问题不会影响其他的进程,所以不会影响主程序的稳定性可靠性高。而一个线程崩溃可能影响整个程序的稳定性,可靠性较低。
- 进程的创建和销毁不仅需要保存寄存器和栈信息,还需要资源的分配回收以及页调度,开销较大。线程只需要保存寄存器和栈信息,开销较小。
Introduction - 深入浅出Java多线程 (gitbook.io)
多线程三分钟就可以入个门了! (qq.com)