多线程(一)线程与进程

一、 概念:

1.1 简述:

进程: 是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序 即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如 CPU 时间,内存空间,文件,输入输出设备的使用权等等。也就是说,进程是程序运行的,占用cpu资源等的最小单位。
线程:隶属于进程,是程序执行命令的最小单位。一个进程可以分为多个线程去执行不同的命令,资源分配最小单位是进程,故线程在执行的时候可以进行资源共享等操作。
 
并行和并发:并行和并发区分只是在场景上有所差异;并行是指在cpu多核心或多个cpu情况下两个或多个程序之间 同时执行;并发这是指单个cpu且cpu单核心的情况下两个或多个程序之间 一起执行 (轮片交替执行【将单个程序分成一块一块的,同一时刻只执行某个线程的单个片段,进交替执行】)。
同步和异步:同步和异步则是在执行顺序上面的区别。一段程序,只能从上至下依次执行(不考虑重排序的情况下)这个就是同步执行。对于异步执行则是各做各的,执行上是由上至下,但是中间某个节点耗时比较长,那么就不会进行等待向下执行的过程。比如我们java中新建一个线程就是和原来的主程序异步处理了;ajax默认处理请求响应时就是异步。

1.2 为什么会使用到多线程

      1. 如果是单线程模式,我们在进行一个需要很长时间处理的程序时,其他程序只能等待该程序执行完毕之后才能继续。这个时候比如我们耗时长的程序是进行视频的转码等操作的时候,我们可以使用新的线程处理这个操作,那么我们就可以在其转码期间做其他的事情了,以此来提高系统的使用率

     2.一般我们接触的cpu基本属于多核心的,使用多线程可以增加cpu的利用率。

     3. 对于用户的并发请求,我们可以同时进行。

     4. 对于简单重复的程序进行重复执行的时候,使用多线程的情况下,可以提高响应速度(爬虫)。

二、线程有哪些基本状态?

 线程僵死:多线程环境下,一个子线程被阻塞、或在等待状态中,没有获取到锁、或被唤醒的情况下(一般是其中一个线程因意外情况瓦特了),导致进程无法获取到子线程的结束的信号。

三、线程安全

   概念: 在程序处理过程中,多个线程同时操作主内存中的共享资源(最为常见为变量)这会导致线程安全问题。主要是靠锁进行处理这一安全性问题。

  

  解决方案:

        1. 互斥同步(阻塞同步)

                此方法主要用于对同一资源进行加锁操作,对于成功上锁的线程进行处理,对于未获取到锁的线程进行阻塞等待过程

                synchronized  vs ReentrantLock 

        2. 非阻塞同步

                cas (AtomicInteger  Atomicxxxxx)

        3. 无同步方案

                 主要是将公共的资源进行拆分,从而将共享的资源变成可以作为线程私有的资源,只被当前的线程独立享有的情况,比如ThreadLocal进行数据库连接信息切换等情况。(简单的比如自己玩的时候,譬如爬虫我们规定最大的线程数为3  查出来的数据有12页,那么就每个线程分配4个页面的数据进行爬取就好了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值