【一】并发编程故事背景介绍

背景每一个故事都有一个开始,那么并发编程的故事的开始是什么呢?由于人类的科学技术的发展,需要处理的任务越来越复杂也多样化,导致之前单核的处理器无法处理这些复杂的任务,于是处理器从之前的单核处理器逐渐发展到多核处理器【其实这里也有一个摩尔定律】。多核处理器很好的解决了多任务和任务复杂度的问题,那么我们就应该学习一下多任务处理,这里指的是多线程,Java语言在创建时就支持多线程,很高明!

大家好,又见面了,我是全栈君。

背景

每一个故事都有一个开始,那么并发编程的故事的开始是什么呢?

由于人类的科学技术的发展,需要处理的任务越来越复杂也多样化,导致之前单核的处理器无法处理这些复杂的任务,于是处理器从之前的单核处理器逐渐发展到多核处理器【其实这里也有一个摩尔定律】。

多核处理器很好的解决了多任务和任务复杂度的问题,那么我们就应该学习一下多任务处理,这里指的是多线程,Java语言在创建时就支持多线程,很高明!在多线程的基础上我们来看并发编程!

一定要说的进程和线程

进程

进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的。它是系统进行资源分配和调度的一个独立单位。【根本不知道在说什么】

说白了,进行就是一个运行的程序。比如运行一个QQ、微信,就相当于执行一个进行,在window下,任务管理器中我们可以看到有一个进程的标识!如下图:

这里写图片描述

线程

线程是什么呢?首先线程肯定是要依赖进程,有了进程才有线程!

线程可以理解为在进程中独立运行的子任务,比如QQ中你可以和多个好友聊天(每个聊天窗口相当于启动了一个线程),在聊天的过程中也可以发图片,上传文件等,每个操作都是启动一个新的线程去执行。

线程之间可以共享进程的一些资源,使用多线程在执行多任务多任务的环境中效率会更高!

这里写图片描述

注意:
– 进程是相对于操作系统的;
– 线程是相对于进程的;
– 一定要记住在某些场景下多线程不一定比单线程执行快!

使用多线程的优点

能发挥多核心处理器的强大威力

线程是处理器调度的基本单位,如果一个程序只有一个线程,确运行在双核处理器上,那么处理的利用率只有1/2 ,也就是50%。如果单线程程序运行在核心越多的处理器上,那么利用率越低。

多线程可以提高处理器资源的利用率进而提升系统的吞吐量。

能处理更加复杂的任务

使用多线程,将复杂的异步的工作流分解为一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置进行交互。

使用多线程的缺点【问题】

安全问题

使用多线程会引起线程安全问题,导致某些操作的结果和预期不一致。

在防止出现线程安全的时候,使用同步方法,可能会造成 线程 死锁,影响程序运行。

多线程在出现问题的时候,还不容易排查,不容易复现!

这里提示如果在开发中,使用多线程一定要谨慎和小心。

性能问题

多线程在进行线程上下文切换的时候使用系统资源,如果线程数量太多,会导致系统资源不足,导致系统性能下降。

并且多线程也受到系统资源的限制,会使线程造成阻塞,可能导致多线程的执行效果还不如单线程。

总结

一定要综合起来看多线程,要有全局的视角!

就如看到的一句话,在你写这段代码的时候,就知道会有多少访问量,并发是多少,如果能做到这一点,那就真的厉害了。



如果您觉得这篇博文对你有帮助,请点个赞,谢谢!


如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页http://blog.csdn.net/u010648555

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121130.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql隔离级别选择_修改mysql事务隔离级别

    mysql隔离级别选择_修改mysql事务隔离级别今天同事问Oracle里的一致读也会像MySQL默认的锁住扫描的行吗?首先要明确Oracle里支持的隔离级别:readcommitted/serializable,默认的是readcommitted,而MySQl支持的隔离级别:readuncommitted/readcommitted/repeatableread/serializable,…

    2022年9月11日
    0
  • 使用NodeJS实现JWT原理「建议收藏」

    使用NodeJS实现JWT原理「建议收藏」使用NodeJS实现JWT原理jwt是jsonwebtoken的简称,本文介绍它的原理,最后后端用nodejs自己实现如何为客户端生成令牌token和校验token为什么需要会话管理我们用nodejs为前端或者其他服务提供resful接口时,http协议他是一个无状态的协议,有时候我们需要根据这个请求的上下获取具体的用户是否有权限,针对用户的上下文进行操作。所以出现了cookiessession还有jwt这几种技术的出现,都是对HTTP协议的一个补充。使得我们可以用HTTP协议+状态管理构

    2022年10月17日
    0
  • Labelimg制作数据集「建议收藏」

    Labelimg制作数据集「建议收藏」Labelimg制作数据集1、安装labelimg①下载源码自行安装,安装步骤参考搜索文章下载地址:https://github.com/tzutalin/labelImg②下载打包版直接运行,Windows和Linux平台可用,无需编译下载地址:http://tzutalin.github.io/labelImg/2、图片标注①仿照VOC2007在py-faster-rc…

    2022年6月16日
    32
  • c++ map遍历的几种方式_对map进行遍历

    c++ map遍历的几种方式_对map进行遍历C++map遍历#include#include

    usingnamespacestd;intmain(){map_map;_map[0]=1;_map[1]=2;_map[10]=10;map::iteratoriter;iter=_map

    2022年9月21日
    0
  • 以太坊钱包erc20_xvg币智能合约

    以太坊钱包erc20_xvg币智能合约以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行。本文就智能合约发代币流程作一完整介绍(

    2022年8月4日
    2
  • SqlSession和Mapper使用

    SqlSession和Mapper使用这两个比较简单 就放在这里一起学习理解了 一 SqlSession 学习在 MyBatis 中 SqlSession 是其核心接口 在 MyBatis 中有两个实现类 DefaultSqlSe 和 SqlSessionMa DefaultSqlSe 是单线程使用的 而 SqlSessionMa 在多线程环境下使用 SqlSession 的作用类似于一个 JDBC 中的 Connect

    2025年6月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号