• 多线程学习笔记-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,可能在执行过程中,我们设置的优先级作用很小,细如蚊蝇。

  • 相关阅读:
    Netty NioEventLoop 源码解析(运行相关)
    挖矿病毒的回溯(稍后补充,原来是自己傻逼了)
    关于centos后台执行的坑
    记录编写TS的一些想法
    webstorm永久激活
    PCL学习笔记(六):ubuntu下QT配置PCL
    PCL学习笔记(二)、PCL编码风格
    PCL学习笔记(三):PCL的点类型
    PCL学习笔记(四):PCD文件格式
    PCL学习笔记(五):PCD文件的IO操作
  • 原文地址:https://www.cnblogs.com/kangna/p/15484622.html
Copyright © 2020-2023  润新知