zoukankan      html  css  js  c++  java
  • 48、多线程简介

    进程和线程

    什么是进程?
    可以简单的认为一个应用程序就是一个进程,不过有些应用程序会启动多个进程,即一个应用程序至少会启动一个进程,在windos系统上面通过任务管理器可以查看计算机上正在启动的进程。

    进程和进程之间的内存是独立的,这样可以提高应用程序的稳定性和安全性。

    什么是线程?

    线程是进程中的一个执行场景,一个进程可以启动多个线程
    使用多线程的可以提高CPU的使用率,不是提高执行速度。
    比如一个程序要从本地硬盘中读取和处理文件,假设从硬盘读取一个文件要用6秒,处理一个文件用2秒,如果处理两个文件需要使用16秒:

    6秒读取文件A
    2秒处理文件A
    6秒读取文件B
    2秒处理文件B

    在磁盘读取文件时,CPU是在等待磁盘读取数据,此时CPU是空闲的,一秒钟的时间对于CPU来说可以做非常多的事情,可以利用这段空闲时间去做别的事情,来改变一下上面程序的操作顺序:

    6秒读取文件A
    6秒读取文件B + 2秒处理文件A(利用CPU空闲时间)
    2秒处理文件B

    这样一共需要14秒就可以完成上面操作

    这里其实是通过提高CPU的利用率来减少了操作时间

    线程和线程之间共享堆内存和方法区,栈内存是独立的,每个线程有自己独立的栈

    多线程的应用场景:
    qq多人视频
    迅雷同时下载多个文件

    并行和并发

    并行就是两个或两个以上的任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)
    并发是指两个或两个以上的任务都请求运行,而CPU只能接受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。

    多线程的缺点

    • 设计复杂
      多线程中共享堆内存和方法区,因此里面的一些数据是可以共享的,在设计时要确保数据的准确性
    • 资源消耗增多
      栈内存是不共享的,如果启用多个线程的话会占用更多的内存

    使用多线程可以提高CPU的使用率,但并不意味着线程越多越好,在编写程序时需要掌握好一个平衡点,这样才能够体现出多线程的价值。

  • 相关阅读:
    不要在构造中做太多事情,不然有时候会出现有意思的代码~
    对称加密和非对称加密
    关于WebAPI安全认证的问题
    Dojo和jQuery区别
    跨域访问解决方案:JSONP
    MyEclipse中提示SpringMVC的XML配置文件出错解决方法
    什么是跨域请求
    Hadoop的初步理解
    数据库读写分离的初步理解
    前端渲染和后端渲染
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/10147780.html
Copyright © 2011-2022 走看看