自学内容网 自学内容网

技术总结(四)

一、什么是进程和线程,他们之前区别是什么?

  • 进程(Process) 是指计算机中正在运行的一个程序实例。举例:你打开的微信就是一个进程。
  • 线程(Thread) 也被称为轻量级进程,更加轻量。多个线程可以在同一个进程中同时执行,并且共享进程的资源比如内存空间、文件句柄、网络连接等。举例:你打开的微信里就有一个线程专门用来拉取别人发你的最新的消息。

          

从上面的图看出:一个进程中可以有多个线程,多个线程共享进程的方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器虚拟机栈 和 本地方法栈

  1. 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。
  2. 线程执行开销小,但不利于资源的管理和保护;而进程正相反。

二、为什么要使用多线程?

一、提高资源利用率

CPU 资源

  • 在单线程环境下,如果一个任务因为 I/O 操作(如读取文件、网络请求)而阻塞,CPU 就会处于空闲状态等待 I/O 操作完成。而多线程可以在一个线程等待 I/O 时,让其他线程利用 CPU 资源执行其他任务,从而提高 CPU 的利用率。
二、提高程序响应速度

网络应用

  • 对于网络服务器,如 Web 服务器,多线程可以同时处理多个客户端的请求。当一个线程正在处理一个客户端的复杂请求(如数据库查询等耗时操作)时,其他线程可以快速响应新的客户端连接请求,使得整个服务器的响应速度更快。
三、更好地处理并发任务

并行处理任务

  • 对于一些本身可以并行处理的任务,如矩阵运算、图像渲染等,多线程可以将任务分解并在多个线程中并行执行,从而加快任务的完成速度。例如,在 3D 渲染中,不同的线程可以负责渲染场景中的不同部分,然后将结果合并。

三、线程的同步方式有那些?

线程同步是两个或多个共享关键资源的线程的并发执行。应该同步线程以避免关键的资源使用冲突。

下面是几种常见的线程同步的方式:

  1. 互斥锁(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。
  2. 读写锁(Read-Write Lock):允许多个线程同时读取共享资源,但只有一个线程可以对共享资源进行写操作。
  3. 信号量(Semaphore):它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量
  4. 事件(Event) :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

四、进程有那几种状态

  • 创建状态(new):进程正在被创建,尚未到就绪状态
  • 就绪状态(ready):进程已处于准备运行状态,即进程获得了除了处理器之外的一切所需资源,一旦得到处理器资源(处理器分配的时间片)即可运行。
  • 运行状态(running):进程正在处理器上运行(单核 CPU 下任意时刻只有一个进程处于运行状态)。
  • 阻塞状态(waiting):又称为等待状态,进程正在等待某一事件而暂停运行如等待某资源为可用或等待 IO 操作完成。即使处理器空闲,该进程也不能运行。
  • 结束状态(terminated):进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行。

      


原文地址:https://blog.csdn.net/gghfzs1/article/details/142926419

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!