• 多线程学习笔记-1


    多线程的使用

    首先我们要明确 什么时候需要使用多线程?


    1.阻塞 如果系统中出现了阻塞现象,则可以根据多线程技术来提高运行效率

    2.依赖 多个业务并行时,如果某些业务发生了阻塞,而其他业务并不依赖于被阻塞的业务的执行结果,这时可以用多线程来提高运行效率

    一个简单的例子:

    假如现在有一个请求,该请求服务端的处理需要执行三个很慢的IO操作(比如是查询数据库或者文件) 而我们需要的步骤是:

    1.读取文件1(假设耗时10ms)

    2.处理文件1的数据(1ms)

    3.读取文件2(10ms)

    4.处理文件2的数据(1ms)

    5.读取文件3(10ms)

    6.处理文件3的数据(1ms)

    7.整合结果(1ms)

    如果单个线程进行整体的操作的话,我们需要34ms,但是我们显然可以发现,步骤12、34、56不是相互依赖的,即不依赖于前几个步骤的
    结果 所以我们完全可以使用三个线程来操作12、34、56 就只需要12ms了

    常见的多线程使用场景:

    常见的浏览器,Web服务器,Web处理请求

    servlet多线程

    数据库用到的多线程

    分布式计算

    ...

    思考

    总之,使用多线程都是为了充分利用cpu的资源,提高程序执行效率而进行的操作。当我们发现一个业务的逻辑很消耗时间、资源
    而且业务之间不是相互阻塞的,那我们就可以考虑使用多线程。

    但是,多个线程之间的执行的时间、顺序是不确定的,因此使用多线程也会带来一定的风险,以及有可能对我们业务的逻辑有一些不符。
    虽然在java中,我们可以为线程设置优先级,但是即使确定了优先级,线程优先级高的线程还是不一定会先执行


    在java中,线程我是通过映射到系统的原生线程上来实现的,所以线程的调度最终还是在一定程度上取决于操作系统。所以,即使我们为某个线程设置了优先级,他也不一定会被先执行。优先级设置的高(比如10)可能情况还比较好,若是数字比较低了,因为每个线程默认级别是5,可能在执行过程中,我们设置的优先级作用很小,细如蚊蝇。

  • 相关阅读:
    在Vue中使用Echart图表库。【全网最简单】
    asp.net core的授权过滤器中获取action上的Attribute
    用node.js给C#写一个数据表的实体类生成工具
    node.js操作MySQL数据库
    基于node.js的爬虫框架 node-crawler简单尝试
    Angular双向绑定简单理解
    使用.Net core3.0 开发斗图小程序后端+斗图小程序
    Django的命令操作,python
    python,函数式编程
    python 推导式的用法
  • 原文地址:https://www.cnblogs.com/kangna/p/15484622.html
Copyright © 2020-2023  润新知