Java_进程与线程

进ProcessThread区别进程线程根本区别作为资源分配的单位调度和执行的单位开销每个进程都有独立的代码和数据空间(进程上下文), 进程间的切换会有较大的开销线程可以看成是轻量级的进程, 同一类线程共享代码和...

进Process&Thread

区别 进程 线程
根本区别 作为资源分配的单位 调度和执行的单位
开销 每个进程都有独立的代码和数据空间(进程上下文), 进程间的切换会有较大的开销 线程可以看成是轻量级的进程, 同一类线程共享代码和数据空间, 每个线程有独立的运行栈和程序计数器(PC), 线程切换的开销小
所处环境 在操作系统中能同时运行多个任务(程序) 在同一应用程序中有多个顺序流同时执行
分配内存 系统在运行的时候会为每个进程分配不同的内存区域 除了CPU之外, 不会为线程分配内存(线程所使用的资源是它所属进程的资源), 线程组只能共享资源
包含关系 没有线程的进程是可以看作单线程的, 如果一个进程内拥有多个线程, 则执行过程不是一条线的, 而是多条线程共同完成的 线程是进程的一部分, 所有线程有的时候被称为是轻权进程或者轻量级进程

注意: 很多多线程是模拟出来的, 真正的多线程是指多个CPU, 即多核, 如服务器. 如果是模拟出来的多线程, 即一个CPU的情况下, 在同一个时间点, CPU只能执行一个代码, 因为切换的速度很快, 所以就有同时执行的错觉.

核心概念:

线程就是独立执行路径
在程序运行时, 即使没有自己创建线程, 后台也会存在多个线程, 如gc线程, 主线程
main()称为主线程, 为系统的入口点, 用于执行整个程序
在一个进程中, 如果开辟了多个线程, 线程的运行有调度器安排调度, 调度器是与操作系统密切相关的, 先后顺序是不能人为干预
对同一份资源操作时, 会存在资源抢夺的问题, 需要加入并发控制
线程会带来额外的开销, 如CPU调度时间, 并发控制开销
每个线程在自己的工作内存交互, 加载和存储主内存控制不当会造成数据不一致

本文标题为:Java_进程与线程